Du kan ikke få adgang til en CTE uden for hele erklæringen. Og du kan ikke få adgang til individuelle dele af en CTE uden for det endelige SELECT for en CTE.
Du skal sætte hele CTE (inklusive den endelige SELECT-sætning) ind i markørløkken:
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;