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