Problem polega na tym, że Oracle nie wie, że get_fiscal_year_start_date (SYSDATE)
zwraca jeden wynik. Zakłada więc, że wygeneruje wiele wierszy.
Oczywiście nie mam pod ręką uprzęży testowej, ale ta wersja twojego zapytania powinna wyeliminować połączenie kartezjańskie scalające.
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 wie, że DUAL ma jeden wiersz, a zatem podzapytanie zwróci jedną wartość.