ALTER PROCEDURE
修改存储过程定义。
Syntax
ALTER PROCEDURE <name> [ ( [ [<arg_mode>] [<arg_name>] <arg_type> [, ...] ] ) ]
<action> [, ... ] [RESTRICT]
ALTER PROCEDURE <name> [ ( [ [<arg_mode>] [<arg_name>] <arg_type> [, ...] ] ) ]
RENAME TO <new_name>
ALTER PROCEDURE <name> [ ( [ [<arg_mode>] [<arg_name>] <arg_type> [, ...] ] ) ]
OWNER TO { <new_owner> | CURRENT_USER | SESSION_USER }
ALTER PROCEDURE <name> [ ( [ [<arg_mode>] [<arg_name>] <arg_type> [, ...] ] ) ]
SET SCHEMA <new_schema>
ALTER PROCEDURE <name> [ ( [ [<arg_mode>] [<arg_name>] <arg_type> [, ...] ] ) ]
DEPENDS ON EXTENSION <extension_name>
其中 <action> 可以为:
{ [EXTERNAL] SECURITY INVOKER | [EXTERNAL] SECURITY DEFINER }
SET <config_param> { TO | = } { <value> | DEFAULT }
SET <config_param> FROM CURRENT
RESET <config_param>
RESET ALL描述
只有存储过程所有者才可以使用 ALTER PROCEDURE 来修改存储过程的定义。
如需修改存储过程的 Schema,你必须拥有新 Schema 的 CREATE 权限。
要更改存储过程的所有者,你必须新的所有角色的直接或间接成员,并对存储过程的 Schema 有 CREATE 权限。
?>注意
MAXIR 对使用 STABLE 和 VOLATILE 函数有限制,详情请见 CREATE FUNCTION。
参数
-
<name>存储过程的名称,支持使用 Schema 名称进行限定。如果该存储过程不带参数,其名称在其 Schema 中必须唯一。
-
<action>在存储过程上执行的操作。
关于支持的操作的描述的详细信息,请参考 ALTER FUNCTION 中的“参数”部分。
-
<arg_mode>参数的模式,可以是
IN或VARIADIC。如果未指定此参数,则使用默认值IN。 -
<arg_name>参数的新名称。
请注意,
ALTER PROCEDURE不使用参数名称来识别存储过程。 -
<arg_type>参数的数据类型。
-
RESTRICT忽略此关键词,以符合 SQL 标准。
-
<new_name>存储过程的新名称。
-
<new_owner>,CURRENT_USER, 或SESSION_USER存储过程的新所有者。
-
<new_owner>: 明确指定新的所有角色。如果存储过程是
SECURITY DEFINER,那么它将作为新所有者运行。 -
CURRENT_USER: 将所有者修改为当前用户。 -
SESSION_USER: 将所有者修改为当前会话用户。
-
-
<new_schema>存储过程的新 Schema。
-
<extension_name>存储过程所依赖的扩展的名称。
如果你执行了
ALTER PROCEDURE ... DEPENDS ON EXTENSION。当制定的扩展被删除时,该存储过程也会被删除。
示例
将带有 text 和 integer 类型的两个参数的存储过程 record 重命名为 insert_record:
ALTER PROCEDURE record(text, integer) RENAME TO insert_record;将带有 text 和 integer 类型的两个参数的存储过程 insert_record 的所有者更改为 mary@example.com:
ALTER PROCEDURE insert_record(text, integer) OWNER TO "mary@example.com";将带有 text 和 integer 类型的两个参数的存储过程 insert_record 的 Schema 更改为 public:
ALTER PROCEDURE insert_record(text, integer) SET SCHEMA public;将 text 和 integer 类型的存储过程 insert_record 标记为依赖于扩展 gp_exttable_fdw:
ALTER PROCEDURE insert_record(text, integer) DEPENDS ON EXTENSION gp_exttable_fdw;将带有 text 和 integer 类型的两个参数的存储过程 insert_record 的搜索路径更改为 DEFAULT:
ALTER FUNCTION insert_record(text, integer) SET search_path to DEFAULT;SQL 标准兼容性
MAXIR 中的 ALTER PROCEDURE 与标准 SQL ALTER PROCEDURE 部分兼容。标准 SQL 的 ALTER PROCEDURE 允许你修改存储过程的更多属性,而 MAXIR 中的 ALTER PROCEDURE 允许你改变存储过程的名称、所有者、Schema 和易变性,更改存储过程的配置参数的默认值,并使存储过程成为安全定义者。