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

Posted

技术标签:

【中文标题】如何在 PostgreSQL 13 中使用 INOUT 参数调用存储过程(不是函数)【英文标题】:How to call a stored procedure (not function) with INOUT parameter in PostgreSQL 13 【发布时间】:2021-01-25 13:54:42 【问题描述】:

我有这个存储过程:

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;

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

【问题讨论】:

【参考方案1】:

这是解决方案:

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

注意:1

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

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

DO in PostgreSQL

【讨论】:

以上是关于如何在 PostgreSQL 13 中使用 INOUT 参数调用存储过程(不是函数)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 中回滚更新

在 PostgreSQL 中,如何使用 COPY 命令插入数据?

如何使用 Play 框架中的演变在 PostgreSQL 中创建函数?

如何在 C# 中从 Npgsql 4.1.5.0 执行匿名块 PL/pgSQL (PostgreSQL 13)

如何在 AWS RDS Postgresql 13 上设置 wal_level?

如何移动postgresql 13数据库的位置