Skip to content

删除存储函数

语法格式

sql
DropProcedureStmt::=
    DROP FUNCTION [IF EXISTS] name_space alter_behavior

alter_behavior::=
    [CASCADE | RESTRICT]

参数说明

  • IF EXISTS:删除时存储过程或函数不存在,忽略此错误。
  • alter_behavior:若该参数不提供则默认使用RESTRICT,在删除存储过程或函数时会检测存储过程或存储函数是否被其他对象依赖,若存在依赖则删除失败,若无依赖则删除成功;CASCADE则表示强制删除存储过程或存储函数,强制删除被依赖对象后,数据库还会对依赖对象的valid状态进行对应处理。

示例

sql
-- 创建函数
SQL> CREATE OR REPLACE FUNCTION func_tab(num INT) RETURN TABLE OF RECORD(id INT, name VARCHAR(10)) IS
DECLARE  subtype rec IS RECORD(id INT, name CHAR(10));
  tab TABLE OF rec;
BEGIN
  FOR i IN 1 .. num LOOP
    tab.EXTEND;
    tab(tab.last) := rec(i, 'name' || i);
  END FOR;
  RETURN tab;
END;
/

-- 使用函数
SQL> SELECT * FROM TABLE(func_tab(3));

ID | NAME |
------------------------------------------------------------------------------
1 | name1|
2 | name2|
3 | name3|

-- 删除函数
SQL> DROP FUNCTION func_tab;  

-- 已删除,再次执行返回错误
SQL> SELECT * FROM TABLE(func_tab(3));
Error: [E10049 L1 C21] 字段变量或函数"FUNC_TAB"(3)不存在