更新时间:2025-07-10 GMT+08:00

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;
    

参数说明

表1 ALTER FUNCTION参数说明

参数

描述

取值范围

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

  • CALLED ON NULL INPUT,表明该函数的某些参数是NULL的时可以按照正常的方式调用。缺省时与指定此参数的作用相同。
  • STRICT,如果函数的某个参数是NULL时,此函数总是返回NULL。如果指定了该参数,当参数为NULL值时不被调用而只是自动返回一个NULL结果。
  • RETURNS NULL ON NULL INPUT和STRICT的功能相同。

-

IMMUTABLE | STABLE | VOLATILE

  • IMMUTABLE,表示该函数在给出同样的参数值时总是返回同样的结果。
  • STABLE,表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。
  • VOLATILE,表示该函数值可以在一次表扫描内改变,不会做任何优化。

IMMUTABLE、STABLE和VOLATILE的详细介绍可参考GaussDB(DWS)函数易变属性的三种行为

SHIPPABLE | NOT SHIPPABLE

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

  • 对于IMMUTABLE类型的函数,函数始终可以下推到DN上执行。
  • 对于STABLE/VOLATILE类型的函数,仅当函数的属性是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

  • value

    把指定的数据库会话参数值设置为给定的值。

    • DEFAULT或RESET,表示新的会话中使用系统的缺省设置。
    • OFF,表示关闭设置。

    指定默认值。

  • from current

    取当前会话中的值设置为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;