关于 YMatrix
标准集群部署
数据写入
数据迁移
数据查询
运维监控
参考指南
工具指南
数据类型
存储引擎
执行引擎
流计算引擎
灾难恢复
系统配置参数
索引
扩展
SQL 参考
常见问题(FAQ)
定义一个新过程。
CREATE [OR REPLACE] PROCEDURE <name>
( [ [<argmode>] [<argname>] <argtype> [ { DEFAULT | = } <default_expr> ] [, ...] ] )
{ LANGUAGE <lang_name>
| TRANSFORM { FOR TYPE <type_name> } [, ... ]
| { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER }
| SET <configuration_parameter> { TO <value> | = <value> | FROM CURRENT }
| AS '<definition>'
| AS '<obj_file>', '<link_symbol>'
} ...
CREATE PROCEDURE 定义一个新过程。CREATE OR REPLACE PROCEDURE 则会创建新过程或替换现有定义。定义过程时,用户必须对该语言拥有 USAGE 权限。
若包含模式名称,则过程将在指定模式中创建;否则创建于当前模式。新过程名称不得与同一模式下任何具有相同输入参数类型的现有过程重名。但参数类型不同的过程和函数可共享名称(重载)。
要更新现有存储过程的当前定义,请使用 CREATE OR REPLACE PROCEDURE 语句。此方法无法更改存储过程的名称或参数类型(这样做实际上会创建一个新的、独立的存储过程)。
当使用 CREATE OR REPLACE PROCEDURE 替换现有存储过程时,该存储过程的所有权和权限保持不变。所有其他存储过程属性将被赋予命令中指定或隐含的值。您必须拥有该存储过程才能进行替换(这包括作为拥有角色的成员)。
创建存储过程的用户将成为该存储过程的所有者。
要创建过程,必须对参数类型拥有USAGE权限。
name
argmode
argname
argtype
T过程参数的数据类型(可选带模式限定),如有。参数类型可以是基类型、复合类型或域类型,也可以引用表列的类型。
根据具体实现语言,也可能允许指定伪类型(如cstring)。伪类型表明实际参数类型要么未完整指定,要么超出常规SQL数据类型的范围。
列的类型通过表名.列名%类型来引用。使用此功能有时可使过程不受表定义变更的影响。
default_expr
lang_name
TRANSFORM { FOR TYPE type_name } [, ... ] }
[EXTERNAL] SECURITY INVOKER
[EXTERNAL] SECURITY DEFINER
configuration_parameter
value
definition
obj_file, link_symbol
有关函数创建的更多详细信息(同样适用于存储过程),请参阅CREATE FUNCTION。
使用 CALL 执行存储过程。
CREATE PROCEDURE insert_data(a integer, b integer)
LANGUAGE SQL
AS $$
INSERT INTO tbl VALUES (a);
INSERT INTO tbl VALUES (b);
$$;
CALL insert_data(1, 2);
SQL标准中定义了CREATE PROCEDURE命令。数据库版本与此类似但并非完全兼容。详情请参阅CREATE FUNCTION。