Het probleem is dat Oracle niet weet dat get_fiscal_year_start_date (SYSDATE)
geeft één resultaat terug. Dus het gaat ervan uit dat het veel rijen zal genereren.
Uiteraard heb ik geen testharnas bij de hand, maar deze versie van uw zoekopdracht zou de cartesiaanse samenvoeging moeten uitbannen.
SELECT RTRIM (position) AS "POSITION",
. // Other fields
.
.
FROM schema.table x
, ( select get_fiscal_year_start_date (SYSDATE) as fiscal_year
from dual ) fy
WHERE hours > 0
AND pay = 'RGW'
AND NOT EXISTS( SELECT position
FROM schema.table2 y
where y.date = fy.fiscal_year
AND y.position = x.position )
Oracle weet dat DUAL één rij heeft, en daarom zal de subquery één waarde teruggeven.