ALTER FUNCTION
功能描述
修改自定义函数的属性。
注意事项
- 只有该函数的所有者或者授予了函数ALTER权限的用户才有权限执行ALTER FUNCTION,系统管理员默认拥有该权限。
- 要修改函数的所有者的用户必须是新拥有角色的直接或间接成员。
- 要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限。
- 要修改函数的所属模式,必须拥有新模式的CREATE权限。
- 如果函数中涉及对临时表相关的操作,则无法使用ALTER FUNCTION。
语法格式
- 修改自定义函数的附加参数。
1 2
ALTER FUNCTION function_name ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) action [ ... ] [ RESTRICT ];
其中附加参数action子句语法为:
1 2 3 4 5 6 7 8 9 10 11 12
{CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT} | {IMMUTABLE | STABLE | VOLATILE} | {SHIPPABLE | NOT SHIPPABLE} | {NOT FENCED | FENCED} | {MASKED | NOT MASKED} | [ NOT ] LEAKPROOF | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } | AUTHID { DEFINER | CURRENT_USER } | COST execution_cost | ROWS result_rows | SET configuration_parameter { { TO | = } { value | DEFAULT }| FROM CURRENT} | RESET {configuration_parameter | ALL}
- 修改自定义函数的名称,支持新函数名前带有原函数所在的schema名,不支持同时修改schema名。
1 2 3 4
ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) RENAME TO new_name; ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) RENAME TO schema.new_name;
- 修改自定义函数的所属者。
1 2
ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) OWNER TO new_owner;
- 修改自定义函数的模式。
1 2
ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) SET SCHEMA new_schema;
参数说明
参数 |
描述 |
取值范围 |
---|---|---|
function_name |
需要修改的函数名称。 |
已存在的函数名。 |
argmode |
参数的模式。标识该参数是输入、输出还是输入输出参数。 |
IN、OUT或者IN OUT。 缺省值是IN。 |
argname |
参数名称。 |
字符串,需符合标识符命名规范。 |
argtype |
函数的参数类型。 |
有效的类型,请参考数据类型。 |
new_name |
函数的新名称。 |
字符串,需符合标识符命名规范。 |
new_owner |
函数的新所有者。 |
有效的用户名或角色名。 |
new_schema |
函数的新模式。 |
已存在的模式。 |
CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT |
|
- |
IMMUTABLE | STABLE | VOLATILE |
|
IMMUTABLE、STABLE和VOLATILE的详细介绍可参考GaussDB(DWS)函数易变属性的三种行为。 |
SHIPPABLE | NOT SHIPPABLE |
表示该函数是否可以下推到DN上执行。
|
- |
MASKED | NOT MASKED |
表示该函数在guc参数enable_redactcol_computable开启的情况下,是否进行脱敏。MASKED支持修改系统函数,无法和其他ALTER FUNCTION中的action一起使用。 |
- |
LEAKPROOF |
表示该函数没有副作用,指出参数只包括返回值。LEAKPROOF只能由系统管理员设置。 |
- |
EXTERNAL(可选) |
允许使用EXTERNAL关键字实现SQL兼容,此功能适用于所有函数而不仅是外部函数。 |
- |
SECURITY INVOKER/AUTHID CURREN_USER |
表明该函数将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。 SECURITY INVOKER和AUTHID CURREN_USER的功能相同。 |
- |
SECURITY DEFINER/AUTHID DEFINER |
声明该函数将以创建它的用户的权限执行。缺省时与指定此参数的作用相同。 AUTHID DEFINER和SECURITY DEFINER的功能相同。 |
- |
COST execution_cost |
用来估计函数的执行成本。 execution_cost以cpu_operator_cost为单位。 |
正数。 |
ROWS result_rows |
估计函数返回的行数。用于函数返回的是一个集合。 |
正数,默认值为1000行。 |
configuration_parameter |
字符串。 |
示例
创建计算两个整数和的函数func_add_sql2并返回结果。如果输入为null,则返回null。
1 2 3 4 5 6 7 8 |
DROP FUNCTION IF EXISTS func_add_sql2; CREATE FUNCTION func_add_sql2(num1 integer, num2 integer) RETURN integer AS BEGIN RETURN num1 + num2; END; / ; |
修改函数func_add_sql2的执行规则为IMMUTABLE,即参数不变时返回相同结果。
1
|
ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) IMMUTABLE; |
将函数func_add_sql2的名称修改为add_two_number。
1
|
ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) RENAME TO add_two_number; |
将函数add_two_number的所有者修改为dbadmin。
1
|
ALTER FUNCTION add_two_number(INTEGER, INTEGER) OWNER TO dbadmin; |