Bạn không thể truy cập CTE bên ngoài toàn bộ câu lệnh. Và bạn không thể truy cập các phần riêng lẻ của CTE ngoài phần CHỌN cuối cùng cho một CTE.
Bạn cần đặt toàn bộ CTE (bao gồm cả câu lệnh SELECT cuối cùng) thành vòng lặp con trỏ:
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;