华为云云数据库GaussDBALTER FUNCTION_云淘科技

功能描述

修改自定义函数的属性或重编译。

注意事项

只有函数的所有者或者被授予了函数ALTER权限的用户才能执行ALTER FUNCTION命令,系统管理员默认拥有该权限。针对所要修改属性的不同,对其还有以下权限约束:

如果函数中涉及对临时表相关的操作,则无法使用ALTER FUNCTION。
修改函数的所有者或修改函数的模式,当前用户必须是该函数的所有者或者系统管理员,且该用户是新所有者角色的成员。
只有系统管理员和初始化用户可以将function的schema修改成public。

重编译需要设置plpgsql_dependency参数。
当打开三权分立时,即使是系统管理员,也必须拥有用户组权限才能修改函数的owner。
只有初始化用户才能修改函数的owner为初始化用户。

语法格式

修改自定义函数的附加参数。

1
2
ALTER FUNCTION function_name ( [ { [ argname ] [ argmode ] argtype} [, ...] ] )
    action [ ... ] [ RESTRICT ];

其中附加参数action子句语法为。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT}
 | {IMMUTABLE | STABLE | VOLATILE}
 | {SHIPPABLE | NOT SHIPPABLE}
 | {NOT FENCED | FENCED}
 | [ 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}

修改自定义函数的名称。

1
2
ALTER FUNCTION funname ( [ { [ argname ] [ argmode ] argtype} [, ...] ] )
    RENAME TO new_name;

修改自定义函数的所属者。

1
2
ALTER FUNCTION funname ( [ { [ argname ] [ argmode ] argtype} [, ...] ] )
    OWNER TO new_owner;

修改自定义函数的模式。

1
2
ALTER FUNCTION funname ( [ { [ argname ] [ argmode ] argtype} [, ...] ] )
    SET SCHEMA new_schema;

重编译函数

ALTER FUNCTION function_name COMPILE;

参数说明

function_name

要修改的函数名称。

取值范围:已存在的函数名。

argmode

标识该参数是输入、输出参数。

取值范围:IN/OUT/IN OUT

argname

参数名称。

取值范围:字符串,符合标识符命名规范。

argtype

参数类型。

取值范围:有效的类型,请参考数据类型。

CALLED ON NULL INPUT

表明该函数的某些参数是NULL的时候可以按照正常的方式调用。缺省时与指定此参数的作用相同。

RETURNS NULL ON NULL INPUT

STRICT

STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,则如果存在NULL参数时不会执行该函数;而只是自动假设一个NULL结果。

RETURNS NULL ON NULL INPUT和STRICT的功能相同。

IMMUTABLE

表示该函数在给出同样的参数值时总是返回同样的结果。

STABLE

表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。

VOLATILE

表示该函数值可以在一次表扫描内改变,不会做任何优化。

SHIPPABLE
NOT SHIPPABLE

表示该函数是否可以下推到DN上执行。

对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。

对于STABLE/VOLATILE类型的函数,仅当函数的属性是SHIPPABLE的时候,函数可以下推到DN执行。

LEAKPROOF

表示该函数没有副作用,指出参数只包括返回值。LEAKROOF只能由系统管理员设置。

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

value

把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。

取值范围:字符串

DEFAULT
OFF
RESET

指定默认值。

from current

取当前会话中的值设置为configuration_parameter的值。

new_name

函数的新名称。要修改函数的所属模式,必须拥有新模式的CREATE权限。

取值范围:字符串,符合标识符命名规范。

new_owner

函数的新所有者。要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限。需要注意注意的是:仅有初始化用户才可以将函数的owner设置为初始化用户。

取值范围:已存在的用户角色。

new_schema

函数的新模式。

取值范围:已存在的模式。

示例

请参见CREATE FUNCTION的示例。

重编译示例:

-- 开启依赖功能
set behavior_compat_options ='plpgsql_dependency';
-- 创建函数
create or replace function test_func(a int) return int
is
    proc_var int;
begin
    proc_var := a;
    return 1;
end;
/
-- 用函数名重编译函数
alter procedure test_func compile;
-- 用函数带类型签名重编译存储过程
alter procedure test_func(int) compile;

相关链接

CREATE FUNCTION,DROP FUNCTION

父主题: SQL语法

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家