Stored procedures 如何在PostgreSQL 13中使用INOUT参数调用存储过程(非函数)

Stored procedures 如何在PostgreSQL 13中使用INOUT参数调用存储过程(非函数),stored-procedures,postgresql-13,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

我有一个存储过程:

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
$$
电话:

DECLARE secuencial INT;
CALL SP_ObtenerSecuencialFactura(secuencial);
RAISE NOTICE '%', secuencial;
但当我调用该存储过程时,会出现以下错误:

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

第1行:声明secuencial INT

怎么了?我找到了一些示例,但这些示例只存在于函数中。

这是解决方案:

DO
$$
DECLARE secuencial INT;
BEGIN
    CALL SP_ObtenerSecuencialFactura(secuencial);
    RAISE NOTICE '%', secuencial;
END
$$
注:1

查询在85毫秒内成功返回

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