如何在 PostgreSQL 13 中使用 INOUT 参数调用存储过程(不是函数)

Ejr*_*085 5 stored-procedures postgresql-13

我有这个存储过程:

CREATE OR REPLACE PROCEDURE SP_ObtenerSecuencialFactura(INOUT p_secuencial INT)
LANGUAGE PLPGSQL 
AS 
$$
BEGIN
    SELECT MAX("CODIGOFACTURA") + 1 INTO p_secuencial FROM "FACTURA";
    IF p_secuencial IS NULL THEN
        p_secuencial := 1;
    END IF;
END
$$
Run Code Online (Sandbox Code Playgroud)

和电话:

DECLARE secuencial INT;
CALL SP_ObtenerSecuencialFactura(secuencial);
RAISE NOTICE '%', secuencial;
Run Code Online (Sandbox Code Playgroud)

但是当我调用该存储过程时出现此错误:

错误:“INT”处或附近的语法错误

第 1 行:DECLARE secuencial INT;

怎么了?我正在寻找示例,但仅存在于函数中。

Ejr*_*085 5

这是解决方案:

DO
$$
DECLARE secuencial INT;
BEGIN
    CALL SP_ObtenerSecuencialFactura(secuencial);
    RAISE NOTICE '%', secuencial;
END
$$
Run Code Online (Sandbox Code Playgroud)

注意:1

查询在 85 毫秒内成功返回。

PostgreSQL使用PL/pgSQL就像Oracle使用PL/SQL一样,因此,要调用带有OUTIN参数的存储过程,我们需要用“do”和“$$”将调用和匿名块中的变量包含起来

在 PostgreSQL 中执行