Используйте цикл for после предложения With в PL/SQL

Я использую PL/SQL. Я пытаюсь создать цикл for сразу после определения временных таблиц в предложении with. Однако я получаю сообщение об ошибке, чтобы сначала выполнить запрос SELECT.

Например

WITH TMP1 AS (.....), TMP2 AS (......), TMP3 AS (......)

FOR R IN (SELECT DISTINCT ..... FROM TMP1 WHERE .....)
LOOP
SELECT .... FROM TMP2, TMP2 WHERE TMP2.... = R..... ....

Как мне это сделать?

Спасибо


person aakashgupta.0205    schedule 30.05.2016    source источник
comment
Вы захотите ознакомиться с различиями между SQL и PL/SQL — это два отдельных языка, хотя каждый из них может быть встроен в другой.   -  person Jeffrey Kemp    schedule 31.05.2016


Ответы (1)


Вы не можете получить доступ к CTE за пределами всего оператора. И вы не можете получить доступ к отдельным частям CTE за пределами окончательного SELECT для CTE.

Вам нужно поместить все CTE (включая последний оператор SELECT) в цикл курсора:

FOR R IN (WITH TMP1 AS (.....), 
               TMP2 AS (......), 
               TMP3 AS (......)
          SELECT DISTINCT ..... 
          FROM TMP1 
             JOIN temp2 ON ... 
             JOIN temp3 ON ... 
          WHERE .....)
LOOP
   -- here goes the code that processes each row of the query
END LOOP;
person a_horse_with_no_name    schedule 30.05.2016