ALTER PROCEDURE
功能描述
修改一个自定义存储过程的属性。
注意事项
只有存储过程的所有者或者被授予了存储过程ALTER权限的用户才能执行ALTER PROCEDURE命令,系统管理员默认拥有该权限。针对所要修改属性的不同,还有以下权限约束:
- 如果存储过程中涉及对临时表相关的操作,则无法使用ALTER PROCEDURE。
- 修改存储过程的所有者或修改存储过程的模式,当前用户必须是该存储过程的所有者或者系统管理员,且该用户是新所有者角色的成员。
- 只有系统管理员和初始化用户可以将procedure的schema修改成public。
- 重命名存储过程时,不能与当前模式下已经存在的synonym产生命名冲突。
- 修改存储过程的模式时,不能与新模式下已经存在的synonym产生命名冲突。
语法格式
修改自定义存储过程的附加参数。
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] action [ ... ] [ RESTRICT ];
其中自定义存储过程的附加参数action语法为:
[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER SET configuration_parameter { TO | = } { value | DEFAULT } SET configuration_parameter FROM CURRENT RESET configuration_parameter RESET ALL
修改自定义存储过程的名称。
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] RENAME TO new_name;
修改自定义存储过程的所属者。
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER };
修改自定义存储过程的模式。
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] SET SCHEMA new_schema;
修改自定义存储过程的插件。
ALTER PROCEDURE name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] [ NO ] DEPENDS ON EXTENSION extension_name;
参数说明
argmode
该参数是输入、输出参数。
取值范围:IN/OUT/INOUT/VARIADIC。
argname
参数名称。
取值范围:字符串,符合标识符命名规范。
argtype
存储过程参数的类型。
new_name
存储过程的新名称。要修改存储过程的所属模式,必须拥有新模式的CREATE权限。
取值范围:字符串,符合标识符命名规范。
new_owner
存储过程的新所有者。要修改存储过程的所有者,新所有者必须拥有该存储过程所属模式的CREATE权限。
取值范围:已存在的用户角色。
new_schema
存储过程的新模式。
取值范围:已存在的模式。
extension_name
已安装扩展的名称。
EXTERNAL
(可选)目的是和SQL兼容,这个特性适合于所有函数,而不仅是外部函数。
SECURITY INVOKER
表明该存储过程将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。
SECURITY DEFINER
声明该存储过程将以创建它的用户的权限执行。
configuration_parameter
value
把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。
取值范围:字符串。
- DEFAULT
- OFF
- RESET
DEFAULT
指定默认值。
FROM CURRENT
取当前会话中的值设置为configuration_parameter的值。
示例
1、创建测试表。
CREATE TABLE EXAMPLE1(COL1 INT);
2、创建存储过程。
CREATE OR REPLACE PROCEDURE EXAMPLE_1150701 (INTIN IN INT, INTOUT OUT INT)
AS
BEGIN
INTOUT := INTIN + 1;
COMMIT;
END;
/
3、修改存储过程的名字。
ALTER PROCEDURE EXAMPLE_1150701(INTIN IN INT, INTOUT OUT INT) RENAME TO E_1150701;
4、删除存储过程。
DROP PROCEDURE E_1150701;