U hebt geen toegang tot een CTE buiten de hele verklaring. En je hebt geen toegang tot afzonderlijke delen van een CTE buiten de definitieve SELECT voor een CTE.
Je moet het geheel . plaatsen CTE (inclusief de laatste SELECT-instructie) in de cursorlus:
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;