Hallo Roland,
wenn du dein SELECT-Statement als Ganzes ablaufen lassen willst, hast du wohl keine Chance, den Output aufzuteilen.
Ein möglicher Workaround wäre, dein Statement zu splitten:
SELECT * FROM (dein SELECT incl. Pseudospalte ROWNUM)
where rownum ;
Dann könntest du bequem vor jedem SELECT ein neues Spoolfile angeben.
Hübscher wäre natürlich, wenn du die Aufteilung schon innerhalb deines Originalstatements hinbekommen könntest.
Ein möglicher Workaround wäre, dein Statement zu splitten:
SELECT * FROM (dein SELECT incl. Pseudospalte ROWNUM)
where rownum ;
Das wird so allerdings nicht viel nützen, da eine Bedingung á la ROWNUM > xy immer falsch ist, wenn xy >= 1
Die erste Zeile die gelesen würde bekommt die 1 -> Bedingung nicht erfüllt. Die nächste gelesene Zeile würde dann die 1 bekommen -> Bedingung nicht erfüllt usw.
Ein Hilfskonstrukt wäre eine temporäre Tabelle oder ein materialized view, der eine „echte“ Spalte mit der Zeilennummer enthält:
create materialized view v_table as select table.*, rownum rownum2 from table;
select * from v_table where rownum2 between 1 and 10;
select * from v_table where rownum2 between 11 and 20;
…
Hi Stephan,
ich meinte natürlich, dass außerhalb des eigentlichen Statements auf die im SELECT vergebene Rownum referenziert wird, also:
SELECT * FROM (SELECT *, rownum rn FROM tabelle)
WHERE rn ;
Müsste doch klappen.
Grüßt: Guido
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]