Daten auf mehere spoolfile aufteilen?

Hallo,

Ich habe eine einfache SQL Abfrage die eine größere Datenmenge mit ~3 Mio einträgen erzeugen würde, die ich in einem Spoolfile ablegen möchte.

Gibt es eine Möglichkeit mit SQL (Oracle 9) oder PL/SQL
diese Daten auf mehrere Files aufzuteilen?

lg Roland

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.

Grüßt: Guido

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;

MfG
Stephan

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]