Hier mal das SQL:

WITH LISTE
(GESHID, BTLHID, PTAHID, PTAHIDALTK, PTASTUFE, VERTRETENER, EBENE, PTGPTAGRP, PTG4STEUER, SORT ) AS
(
SELECT B.GESHID, B.BTLHID, B.PTAHID, PA.PTAHIDALTK, PA.PTASTUFE, 0 AS VERTRETENER,
DEC(1) AS EBENE, PG.PTGPTAGRP, PG.PTG4STEUER,
'E1001' CONCAT 'P' CONCAT TRIM(CHAR(PA.PTASEQ+100000)) CONCAT '#'
CONCAT TRIM(CHAR(B.BTLHID + 10000)) CONCAT '.' AS SORT
FROM RIPBTL AS B
LEFT OUTER JOIN RIPBTV V ON B.GESHID=V.GESHID AND B.BTLHID=V.BTV4VBTLID
JOIN RIPPTG PG ON PG.FIRHID = 22 AND PG.GGPHID= 39 AND PG.PTAHID=B.PTAHID
JOIN RIPPTA PA ON B.PTAHID = PA.PTAHID
WHERE B.GESHID = 333661 AND V.GESHID IS NULL
UNION ALL
SELECT V.GESHID, B.BTLHID, B.PTAHID, PA.PTAHIDALTK, PA.PTASTUFE,
V.BTLHID AS VERTRETENER, X.EBENE + 1, PG.PTGPTAGRP, PG.PTG4STEUER,
TRIM(X.SORT) CONCAT 'E' CONCAT TRIM(CHAR(X.EBENE + 1001)) CONCAT 'P'
CONCAT TRIM(CHAR(PA.PTASEQ+100000)) CONCAT '#' CONCAT
TRIM(CHAR(B.BTLHID+10000)) CONCAT ';'
FROM RIPBTV V
JOIN RIPBTL B ON V.GESHID=B.GESHID AND V.BTV4VBTLID=B.BTLHID
JOIN RIPPTG PG ON PG.FIRHID = 22 AND PG.GGPHID=39 AND PG.PTAHID=B.PTAHID
JOIN RIPPTA PA ON B.PTAHID = PA.PTAHID
INNER JOIN LISTE AS X ON V.GESHID = X.GESHID AND V.BTLHID = X.BTLHID
WHERE V.GESHID=333661 AND X.EBENE <= 5
)
SELECT GESHID, BTLHID, PTAHID, PTAHIDALTK, PTASTUFE, VERTRETENER, EBENE,
PTGPTAGRP, PTG4STEUER, SORT FROM LISTE ORDER BY SORT

Grundsätzlich läuft das Teil ja ziemlich schnell. Es würde auch nicht stören, wenn es nach dem Deployment oder IPL das erste mal ein 2 oder 3 Minuten braucht. Das aber schlichtweg keine Antwort (bzw. stundenlang nichts kommt) ist auch bei 0.5 % der Fälle nicht tragbar - das müsste ich irgendwie hin bekommen.