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

问题描述

我有这个存储过程:

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行:声明安全的INT;

怎么了?我在查找示例,但仅存在函数

解决方法

这是解决方案:

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

注意:1

DO

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

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

DO in PostgreSQL