Postgres CTE с прекурсорами - PullRequest
       46

Postgres CTE с прекурсорами

0 голосов
/ 19 февраля 2019

Как я могу открыть несколько рефкурсоров, используя выражения, сгенерированные в CTE?

Я использую рефкурсоры, чтобы возвращать несколько наборов записей из одной и той же функции, и 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 Ответ

0 голосов
/ 19 февраля 2019

Вы не можете сделать это таким образом, потому что вы не можете встроить оператор PL / pgSQL (OPEN) в оператор SQL.

Вам придется выполнить запрос дважды, если вы хотите два refcursors.

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

...