问题
Im using PL/SQL. I am trying to have a for loop right after I define my temporary tables in the with clause. However, Im getting an error to have a SELECT query first.
For instance
WITH TMP1 AS (.....), TMP2 AS (......), TMP3 AS (......)
FOR R IN (SELECT DISTINCT ..... FROM TMP1 WHERE .....)
LOOP
SELECT .... FROM TMP2, TMP2 WHERE TMP2.... = R..... ....
How do I go about doing so?
Thanks
回答1:
You can't access a CTE outside of the whole statement. And you can't access individual parts of a CTE outside of the final SELECT for a CTE.
You need to put the whole CTE (including the final SELECT statement) into the cursor loop:
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;
来源:https://stackoverflow.com/questions/37517772/use-for-loop-after-the-with-clause-in-pl-sql