如何在 Oracle 中删除多个函数

how to drop multiple functions in Oracle

我想在 Oracle SQL 开发人员中一次从我的数据库中删除多个函数。 有人知道如何为此创建脚本吗?

嗯,你必须知道你想放弃哪些。我在下面脚本的 IN 子句中将它们全部命名。

先测试功能:

SQL> create or replace function f1 return number is begin return 1; end;
  2  /

Function created.

SQL> create or replace function f2 return number is begin return 2; end;
  2  /

Function created.

它们有效吗?

SQL> select f1, f2 from dual;

        F1         F2
---------- ----------
         1          2

是的,他们有。

让我们将它们放入脚本中:

SQL> begin
  2    for cur_r in (select object_name
  3                  from user_objects
  4                  where object_name in ('F1', 'F2')
  5                    and object_type = 'FUNCTION'
  6                 )
  7    loop
  8      execute immediate 'drop function ' || cur_r.object_name;
  9    end loop;
 10  end;
 11  /

PL/SQL procedure successfully completed.

他们现在工作吗?

SQL> select f1, f2 from dual;
select f1, f2 from dual
           *
ERROR at line 1:
ORA-00904: "F2": invalid identifier


SQL>

不,因为它们被丢弃了。

好吧,static 选项可以删除函数(有时被认为 更安全 因为您可以仔细检查要删除的内容)包括两个步骤

1 - 运行 以下查询

select 'drop function '||object_name||';'  as sql_txt
from user_objects where object_type = 'FUNCTION' 
and object_name like 'F%' /* filter the selection here */
order by 1;

SQL_TXT                                                                                                                                        
-----------------
drop function FA;
drop function FB;
drop function FC;

2 - 将结果 drop 语句复制到 SQL 开发人员 window 中并执行它们