Как вызвать хранимую процедуру (не функцию) с параметром INOUT в 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
$$

И призыв:

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" и "$$".

ДЕЛАТЬ в PostgreSQL

Другие вопросы по тегам