ALTER FUNCTION

修改函数的定义。

概要

ALTER FUNCTION name ( [ [argmode] [argname] argtype [, ...] ] ) 
   action [, ... ] [RESTRICT]

ALTER FUNCTION name ( [ [argmode] [argname] argtype [, ...] ] )
   RENAME TO new_name

ALTER FUNCTION name ( [ [argmode] [argname] argtype [, ...] ] ) 
   OWNER TO new_owner

ALTER FUNCTION name ( [ [argmode] [argname] argtype [, ...] ] ) 
   SET SCHEMA new_schema

其中 action 是:

{CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT}
{IMMUTABLE | STABLE | VOLATILE | [ NOT ] LEAKPROOF}
{[EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER}
EXECUTE ON { ANY | MASTER | ALL SEGMENTS | INITPLAN }
COST execution_cost
SET configuration_parameter { TO | = } { value | DEFAULT }
SET configuration_parameter FROM CURRENT
RESET configuration_parameter
RESET ALL

描述

ALTER FUNCTION 修改函数的定义。

你必须是函数的所有者才能使用 ALTER FUNCTION。为了修改函数的模式,你还必须 在新模式下拥有 CREATE 权限。为了修改所有者,你还必须是新角色的直接或间接成员, 而且那个角色必须在函数模式上有用 CREATE 的权限。这些限制强制执行改变所有者不会通过删除和重新创建函数做任何你不能做的事情,但是,超级用户无论如何都可以改变任何函数的所有权。

参数

name

  • 一个存在的函数的名称(可能是模式限定的)。

argmode

  • 参数的模式:IN,OUT,INOUT 或者 VARIADIC。如果省略,默认值为 IN。请注意 ALTER FUNCTION 实际上并不关注 OUT 参数, 因为只需要输入参数来确定函数的身份。因此已经足够了对于只列出 IN, INOUT 和 VARIADIC 参数

argname

  • 参数的名称。请注意,ALTER FUNCTION 实际上并不关心参数名称,因为只需要参数数据类型来确定函数的身份。

argtype

  • 函数参数(如果有)的数据类型(可以是方案限定)。

new_name

  • 函数的新名称。

new_owner

  • 函数的新拥有者。请注意,如果函数被标记为 SECURITY DEFINER,随后它将作为新的所有者执行。

new_schema

  • 该函数的新模式。

CALLED ON NULL INPUT

RETURNS NULL ON NULL INPUT

STRICT

  • CALLED ON NULL INPUT 将该函数改为在某些或者全部参数为空值时可以被调用。 RETURNS NULL ON NULL INPUT 或者 STRICT 更改函数,以便如果其任何参数为空,则不会调用该函数;而是自动假设一个空的结果。参阅 CREATE FUNCTION 获取更多信息。

IMMUTABLE

STABLE

VOLATILE

  • 将函数的波动性改为指定的设置。参阅 CREATE FUNCTION 获取更多信息。

[ EXTERNAL ] SECURITY INVOKER

[ EXTERNAL ] SECURITY DEFINER

  • 更改该函数是否为一个安全性定义者。 关键词 EXTERNAL 为了 SQL 的一致性而被忽略。参阅 CREATE FUNCTION 获取更多有关此功能的信息。

LEAKPROOF

  • 更改函数是否被视为防漏的。参阅 CREATE FUNCTION 关于此功能的更多信息。

EXECUTE ON ANY

EXECUTE ON MASTER

EXECUTE ON ALL SEGMENTS

EXECUTE ON INITPLAN

  • EXECUTE ON 属性指定函数在查询执行过程中调用时执行的位置(主实例或段实例)。
    EXECUTE ON ANY (默认值)表示该函数可以在主服务器或任何段实例上执行,并且无论执行 的位置如何,它都会返回相同的结果。 YMatrix 数据库确定函数执行的位置。
    EXECUTE ON MASTER 表示该函数必须只在主实例上执行。
    EXECUTE ON ALL SEGMENTS 表示对于每次调用,该函数必须在所有主段实例上执行,而不是在 主节点上执行。 该函数的总体结果是来自所有段实例的 UNION ALL 结果。
    EXECUTE ON 属性的更多信息,请参阅 CREATE FUNCTION。
    EXECUTE ON INITPLAN 表示函数中包含需要将查询分发到 Segment 节点执行的 SQL 语句并且可能的话需要 Master 特殊处理。

COST execution_cost

  • 更改该函数的估计执行代价。参阅 CREATE FUNCTION 获取更多信息。

configuration_parameter

value

  • 当该函数被调用时,要对一个配置参数做出增加或者更改的赋值。如果 value 是 DEFAULT 或者等价的 R ESET 被使用, 该函数本地的设置将会被移除,这样该函数会使用其环境中存在的值执行。 使用 RESET ALL 可以清除所有函数本地的设置。 SET FROM CURRENT 应用会话的当前值当函数被输入时。

RESTRICT

  • 忽略 SQL 标准。

注意

YMatrix 数据库对某些定义的函数有 STABLE 或者 VOLATILE 这样的限制。 参阅 CREATE FUNCTION 来获取更多信息。

示例

将 integer 类型的函数 sqrt 重命名为 square_root:

ALTER FUNCTION sqrt(integer) RENAME TO square_root;

更改 integer 类型的 sqrt 函数的所有者为 joe

ALTER FUNCTION sqrt(integer) OWNER TO joe;

更改 integer 类型的函数 sqrt 的 模式 为 math:

ALTER FUNCTION sqrt(integer) SET SCHEMA math;

要调整一个函数的自动搜索路径:

ALTER FUNCTION check_password(text) RESET search_path;

兼容性

这个语句部分兼容 SQL 标准中的 ALTER FUNCTION 语句。该标准允许修改一个函数的更多属性,但是不提供重命名一个函数、标记一个函数为安全性定义者、为一个函数附加配置参数值或者更改一个函数的拥有者、模式或者稳定性等功能。 该标准还需要 RESTRICT 关键字, 它在 YMatrix 数据库中是可选的。

另见

CREATE FUNCTIONDROP FUNCTION