ich würde das nicht über ein statement lösen, sondern prozedural mittels PL/SQL (oder java

) ...
1.) alle "erststrecken" ermitteln (... where FK is null) und durchloopen
2.) zur jeweiligen erststrecke die zusatzstrecken suchen und die gewünschte verarbeitung durchführen
soferne die zusatzstrecken wiederum weitere zusatzstrecken haben, könnte man punkt 2 auch noch rekursiv aufrufen solange ...
vorteile:
die pro schritt zu verarbeitenden datenmengen sind gering, da
a.) die erststrecken über den index der foreign-key-column ermittelt werden
b.) die teilstrecken über den index der primary-key-column sehr performant selektiert werden