Как получить из процедуры таблицу и выходной параметр?

Рейтинг: 0Ответов: 0Опубликовано: 05.05.2023

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, и запустить все, то тоже сработает и вернется выходная переменная. Но как сделать, чтобы при одном запуске он и таблицу выводил и в переменную данные занес?

Ответы

Ответов пока нет.