在 Azure Database for PostgreSQL 中创建存储过程
为特定任务创建存储过程具有诸多优势,包括扩展 Azure for PostgreSQL 数据库的功能。 要执行以下操作时使用存储过程:
- 在一个位置开发和测试复杂代码,然后根据需要调用它。
- 高效执行代码。 返回相同结果的存储过程效率更高,因为它们经过预先编译并存储在 Azure Database PostgreSQL 服务器中。
- 使代码更易于读取。
- 在事务中包含错误处理。
- 隐藏用户的复杂性。
虽然 Azure Database for PostgreSQL 支持多种编程语言,但 SQL 是 PostgreSQL 的本机语言,最适合与优化器配合使用。
存储过程是使用关键字 CREATE PROCEDURE 创建的。 或者,使用 CREATE OR REPLACE PROCEDURE 创建新过程或替换具有相同名称的过程。
包括一个架构名称,用于在特定架构中创建过程。 否则就在当前架构中创建。 过程名称在架构中必须是唯一的,包括输入参数类型。 但是,可以通过为具有不同参数类型的过程或函数提供相同的名称来重载过程名称。
创建该过程的用户是该过程的所有者。 还必须指定语言。
过程采用以下参数:
- name -(可选)包括架构名称。
- argmode - 参数的模式。 可以是 IN、INOUT 或 VARIADIC。 默认值为 IN。 不支持 OUT;请改用 INOUT。 VARDIADIC 是相同类型的未定义数量的输入参数,并且必须是最后一个输入参数。
- argname - 参数名称。
- argtype - 参数数据类型。
- default_expr - 如果未指定参数,则使用(相同类型的)默认表达式。 具有默认值的参数后面的输入参数也必须具有默认值。
- lang_name - 用于编写过程的语言。 可以是 sql、c、internal 或用户定义过程语言的名称,例如 plpgsql。
在以下示例中,创建名为 myprocedure 的存储过程,该存储过程采用输入参数 a 和 b。 IN 是参数的默认值,因此我们不必将其显式标识为输入参数。 调用存储过程时,分配给这些参数的值插入到 mytable 中。
CREATE PROCEDURE myprocedure (a integer, b integer)
LANGUAGE SQL
AS $$
INSERT INTO mytable VALUES (a, b);
$$;
符号 $$
用于开始和结束字符串。 也可以使用单引号,但它可能会导致其他编程语言出现问题,因此首选 $$
。