Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Use for loop após a cláusula With em PL/SQL


Você não pode acessar um CTE fora de toda a instrução. E você não pode acessar partes individuais de um CTE fora do SELECT final de um CTE.

Você precisa colocar o todo CTE (incluindo a instrução SELECT final) em o loop do cursor:
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;