Когда вы делаете PERFORM
, результат вашего SELECT
отбрасывается, а это не то, что мы ищем.
Если ваша функция объявлена с OUT
параметрами, то вам нужночтобы заполнить их значениями, используя
SELECT ... INTO ...
Таким образом, способ сделать это - получить значения, поступающие из функции B
, а затем заполнить ваши выходные параметры ими, например:
SELECT * INTO code, msg FROM B(r1, r2);
При этом ваша функция будет выглядеть следующим образом:
CREATE OR REPLACE FUNCTION A(
IN r1 character varying,
IN r2 character varying,
OUT code character varying,
OUT msg character varying)
RETURNS record AS
$BODY$
BEGIN
SELECT * INTO code, msg FROM B(r1, r2);
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
И вы должны называть ее следующим образом:
SELECT * FROM A('first_arg', 'second_arg');
Примечания:
- Переосмыслите, если
VOLATILE
- это то, что вам действительно нужно.Вы можете быть в порядке с STABLE
в зависимости от кода функции B
.Это может немного ускорить процесс - Чтобы сократить объявление типа данных,
character varying
совпадает с varchar
.Подумайте об этом.