Postgres CTE с прекурсорами
Как я могу открыть несколько рекурсоров, используя выражения, сгенерированные в CTE?
Я использую refcursors для возврата нескольких наборов записей из одной и той же функции, а CTE для набора данных повторно использую во время обработки.
Я бы использовал временные таблицы, но я испытал шрам после этого опыта.
Я попробовал это, но это приводит к синтаксической ошибке:
WITH
expr1 (
select ... from ...
),
expr2 (
select ... from expr1 inner join ...
),
expr3 (
OPEN refcursor1 FOR select ... from expr2
)
OPEN refcursor2 FOR select ... from expr2 inner join ...
1 ответ
Решение
Вы не можете сделать это таким образом, потому что вы не можете встроить оператор PL/pgSQL (OPEN
) в выражении SQL.
Вам нужно будет выполнить запрос дважды, если вы хотите два refcursors
,
Возможно, вам следует выяснить, в чем заключалась проблема с временной таблицей - например, проверьте дамп контекста памяти в журнале.