DROP FUNCTION¶
说明¶
删除一个函数
参数¶
IF EXISTS
删除函数时,若存在同名函数则进行删除,否则会跳过操作,且会打印NOTICE提示信息
schema
函数所属的模式名
funcname
是要删除的函数名,函数名必须符合标识符的规则。
注解
当没有重载函数时,可以省略参数列表,直接 DROP FUNCTION funcname 即可; 但是存在重载函数时,删除函数必须带参数列表。
argname
参数的名字。请注意DROP FUNCTION实际上并不注意参数的名字,因为判断函数的身份只需要输入参数的数据类型。
IN|OUT|INOUT|IN OUT
IN表示该参数是输入参数。
OUT表示该参数是输出参数。
INOUT|IN OUT表示该参数是输入输出参数。
注意DROP FUNCTION实际上不注意IN|OUT|INOUT|IN OUT参数,只需输入datatype参数
就足够了。
datatype
函数的参数类型。
RESTRICT|CASCADE|CASCADE CONSTRAINTS
- RESTRICT确保只有不存在依赖关系才可以被删除。
- CASCADE|CASCADE CONSTRAINTS强制删除函数,并删除任何与本函数有依赖性的数据库对象。
默认为RESTRICT
NOCOPY
只做了语法上兼容,实际并未做任何处理。
IN | OUT | INOUT | IN OUT
参数输入/输出类型,缺省则为 IN
default_value
为该参数声明一个默认值
示例¶
示例1: 删除一个函数
-- 清理环境
DROP FUNCTION func1() CASCADE;
DROP FUNCTION func1(INT, VARCHAR) CASCADE;
DROP FUNCTION func1(INT, INT) CASCADE;
-- 创建函数
CREATE FUNCTION func1(pa INT, pb INT) RETURN INT AS
BEGIN
RETURN pa + pb;
END;
/
-- 删除函数
-- 参数个数不匹配,删除失败
DROP FUNCTION func1();
ERROR, RemoveFunction:找不到指定函数,不存在 function FUNC1()
-- 删除函数
-- 参数类型不匹配,删除失败
DROP FUNCTION func1(INT, VARCHAR);
ERROR, RemoveFunction:找不到指定函数,不存在 function FUNC1(integer, character varying)
-- 删除函数
DROP FUNCTION func1(INT, INT);
-- 函数不存在时,删除函数
-- 使用 IF EXISTS 时,跳过操作,不报错
DROP FUNCTION IF EXISTS func1(INT, INT);
-- 不使用 IF EXISTS 时,语句报错
DROP FUNCTION func1(INT, INT);
ERROR, RemoveFunction:找不到指定函数,不存在 function FUNC1(integer, integer)