ALTER PROCEDURE

更改程序的定义。

概要

ALTER PROCEDURE <name> [ ( [ [<argmode>] [<argname>] <argtype> [, ...] ] ) ] 
   <action> [, ... ] [RESTRICT]

ALTER PROCEDURE <name> [ ( [ [<argmode>] [<argname>] <argtype> [, ...] ] ) ]
   RENAME TO <new_name>

ALTER PROCEDURE <name> [ ( [ [<argmode>] [<argname>] <argtype> [, ...] ] ) ]
   OWNER TO { <new_owner> | CURRENT_USER | SESSION_USER }

ALTER PROCEDURE <name> [ ( [ [<argmode>] [<argname>] <argtype> [, ...] ] ) ]
   SET SCHEMA <new_schema>

ALTER PROCEDURE <name> [ ( [ [<argmode>] [<argname>] <argtype> [, ...] ] ) ]
   DEPENDS ON EXTENSION <extension_name>

where <action> is one of:

    { [EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER }
    SET <configuration_parameter> { TO | = } { <value> | DEFAULT }
    SET <configuration_parameter> FROM CURRENT
    RESET <configuration_parameter>
    RESET ALL

描述

ALTER PROCEDURE 用于修改存储过程的定义。

使用 ALTER PROCEDURE 时,必须拥有该存储过程的所有权。若要更改过程所属模式,还需对新模式拥有 CREATE 权限。若要变更所有者,必须是新所有者角色的直接或间接成员,且该角色需对过程所属模式拥有 CREATE 权限。(这些限制确保变更所有者操作不会产生删除并重建过程无法实现的效果。但超级用户仍可任意更改任何过程的所有权。)

参数

  • name
    • 现有存储过程的名称(可选带模式限定)。若未指定参数列表,该名称在其模式中必须唯一。
  • argmode
    • 参数模式:IN 或 VARIADIC。若省略,默认为 IN。
  • 参数名
    • 参数名称。需注意 ALTER PROCEDURE 实际并不关注参数名称,因仅需参数数据类型即可确定函数身份。
  • 参数类型
    • 过程参数的数据类型(可选模式限定),若存在参数时使用。
  • new_name
    • 过程的新名称。
  • new_owner
    • 过程的新所有者。注意:若过程标记为 SECURITY DEFINER,后续将以新所有者身份运行。
  • new_schema
    • 过程的新模式。
  • extension_name
    • 过程依赖的扩展名。
  • [ EXTERNAL ] SECURITY INVOKER
  • [ EXTERNAL ] SECURITY DEFINER
    • 更改过程是否为安全定义者。为符合 SQL 标准,关键字 EXTERNAL 将被忽略。有关此功能的更多信息,请参阅 CREATE PROCEDURE
  • configuration_parameter
  • value
    • 在调用过程时设置或更改配置参数值。若值为 DEFAULT 或等效的 RESET,则清除过程局部设置,过程将使用环境中存在的值运行。使用 RESET ALL 清除所有过程局部设置。SET FROM CURRENT 将 ALTER PROCEDURE 执行时参数的当前值保存为进入过程时应用的值。
    • 有关允许的参数名称和值的详细信息,请参阅 SET
  • RESTRICT
    • 为符合 SQL 标准而忽略。

注意

YMatrix 对定义为 STABLE 或 VOLATILE 的函数使用存在限制。更多信息请参阅 CREATE FUNCTION

示例

将带有两个 integer 类型参数的存储过程 insert_data 重命名为 insert_record:

ALTER PROCEDURE insert_data(integer, integer) RENAME TO insert_record;

将两个 integer 参数的存储过程 insert_data 所有者更改为 joe:

ALTER PROCEDURE insert_data(integer, integer) OWNER TO joe;

将两个 integer 参数的存储过程 insert_data 所属模式更改为 accounting:

ALTER PROCEDURE insert_data(integer, integer) SET SCHEMA accounting;

将存储过程 insert_data(integer, integer) 标记为依赖扩展 myext

ALTER PROCEDURE insert_data(integer, integer) DEPENDS ON EXTENSION myext;

调整为某个过程自动设置的搜索路径:

ALTER PROCEDURE check_password(text) SET search_path = admin, pg_temp;

禁用对过程的 search_path 自动设置:

ALTER PROCEDURE check_password(text) RESET search_path;

该程序现在将使用其调用者所使用的任何搜索路径来执行。

兼容性

此语句与 SQL 标准中的 ALTER PROCEDURE 语句部分兼容。标准允许修改存储过程的更多属性,但不提供重命名存储过程、将存储过程设置为安全定义者、将配置参数值附加到存储过程,或更改存储过程的所有者、模式或易失性的功能。标准还要求使用 RESTRICT 关键字,而在 YMatrix 数据库中该关键字是可选的。

另见

CREATE PROCEDURE, DROP PROCEDURE