Как получить из процедуры таблицу и выходной параметр?
CREATE OR REPLACE PROCEDURE pcd_count_functions(ref REFCURSOR, OUT count_func INTEGER)
LANGUAGE plpgsql AS
$$
BEGIN
count_func := 0;
DROP TABLE IF EXISTS task_4_2;
CREATE TEMP TABLE task_4_2 AS (
SELECT routines.routine_name AS name, parameters.parameter_name AS type
FROM information_schema.routines
LEFT JOIN information_schema.parameters ON routines.specific_name=parameters.specific_name
WHERE routines.specific_schema = 'public' AND routine_type = 'FUNCTION'
GROUP BY routines.routine_name, parameters.parameter_name);
SELECT count(*) INTO count_func FROM (SELECT name FROM task_4_2 GROUP BY name) AS func_names;
OPEN ref FOR
SELECT array_to_string(ARRAY(SELECT name || ', ' || array_to_string(ARRAY(SELECT a.type FROM task_4_2 a WHERE a.name = b.name), ', ')
FROM task_4_2 b
WHERE type IS NOT NULL GROUP BY name), ', ');
END;
$$;
DO
$$
DECLARE count_func INTEGER;
BEGIN
CALL pcd_count_functions('task42', count_func);
FETCH ALL FROM task42;
RAISE NOTICE 'Number of functions: %', count_func;
END;
$$;
При запуске в "DO" получаю ошибку, что "task42" это неизвестная переменная. Но если отдельно запускать строчки с CALL и FETCH (и вместо переменной count_func подставить число-"затычку"), то все сработает и выведется нужная таблица.
Если убрать строчку с FETCH, и запустить все, то тоже сработает и вернется выходная переменная. Но как сделать, чтобы при одном запуске он и таблицу выводил и в переменную данные занес?
Источник: Stack Overflow на русском