如何在 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 中,如何使用 COPY 命令插入数据?
如何使用 Play 框架中的演变在 PostgreSQL 中创建函数?
如何在 C# 中从 Npgsql 4.1.5.0 执行匿名块 PL/pgSQL (PostgreSQL 13)