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,

Возможно, вам следует выяснить, в чем заключалась проблема с временной таблицей - например, проверьте дамп контекста памяти в журнале.

Другие вопросы по тегам