Das Problem ist, dass Oracle dieses get_fiscal_year_start_date (SYSDATE)
nicht kennt gibt ein einziges Ergebnis zurück. Es wird also davon ausgegangen, dass viele Zeilen generiert werden.
Offensichtlich habe ich keine Testumgebung zur Hand, aber diese Version Ihrer Abfrage sollte den kartesischen Merge-Join verbannen.
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 weiß, dass DUAL eine einzelne Zeile hat und daher die Unterabfrage einen Wert zurückgibt.