Vous ne pouvez pas accéder à un CTE en dehors de l'ensemble de la déclaration. Et vous ne pouvez pas accéder à des parties individuelles d'un CTE en dehors du SELECT final pour un CTE.
Vous devez mettre le tout CTE (y compris l'instruction SELECT finale) dans la boucle du curseur :
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;