Hier ist ein einfaches und effektives PL/SQL-Beispiel, um eine große Menge von IDs im SELECT IN zu verarbeiten, indem die IDs in Chunks aufgeteilt werden. Der Code verwendet eine temporäre Tabelle oder eine Collection (z. B. PL/SQL-Tabelle) zum Zwischenspeichern der IDs.

Beispiel: PL/SQL mit Chunks

DECLARE
— Große Menge an IDs als Beispiel
IN_IDS SYS.ODCINUMBERLIST := SYS.ODCINUMBERLIST(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
CHUNK_SIZE PLS_INTEGER := 5; — Anzahl der IDs pro Abfrage
CHUNK SYS.ODCINUMBERLIST; — Chunk zum Speichern von Teilmengen
IDX_START PLS_INTEGER := 1; — Startindex für den Chunk
BEGIN
— Schleife durch die gesamte Liste der IDs in Chunks
WHILE IDX_START <= IN_IDS.COUNT LOOP -- Teilmenge (Chunk) der IDs erstellen CHUNK := IN_IDS(IDX_START .. LEAST(IDX_START + CHUNK_SIZE - 1, IN_IDS.COUNT)); -- Abfrage mit dem aktuellen Chunk FOR REC IN ( SELECT EMP_ID, NAME, SALARY FROM EMPLOYEES WHERE EMP_ID IN (SELECT COLUMN_VALUE FROM TABLE(CHUNK)) ) LOOP -- Ergebnis verarbeiten (z. B. ausgeben) DBMS_OUTPUT.PUT_LINE('ID: ' || REC.EMP_ID || ', Name: ' || REC.NAME || ', Salary: ' || REC.SALARY); END LOOP; -- Nächster Chunk IDX_START := IDX_START + CHUNK_SIZE; END LOOP; END; / Erklärung 1. IN_IDS als Eingangsliste: • SYS.ODCINUMBERLIST ist eine Oracle vordefinierte Collection, die als Eingabeliste für IDs dient. Diese kann mit beliebig vielen Werten befüllt werden. 2. Chunk-Größe (CHUNK_SIZE): • Die Liste wird in Blöcke der Größe CHUNK_SIZE aufgeteilt (z. B. 5 IDs pro Abfrage). 3. CHUNK enthält Teilmenge der IDs: • Die Methode IDXS .. LEAST(...) sorgt dafür, dass der Chunk nicht über die Liste hinausgeht. 4. Abfrage mit SELECT IN: • TABLE(CHUNK) konvertiert die Collection in eine Tabellenform, sodass sie in der IN-Klausel verwendet werden kann. 5. Ergebnisse verarbeiten: • Innerhalb der FOR REC IN-Schleife werden die Ergebnisse für jeden Chunk verarbeitet. 6. Nächster Chunk: • IDX_START wird um die Größe des Chunks erhöht, um die nächste Teilmenge abzuarbeiten. Vorteile dieses Ansatzes • Einfach: Kein Bedarf an temporären Tabellen, alles passiert im Speicher. • Effizient: Die IN-Klausel wird mit einer begrenzten Anzahl an IDs gefüllt, um Performanceprobleme zu vermeiden. • Flexibel: Funktioniert für beliebig große Listen, da die Abfragen in Blöcken erfolgen. Beispiel-Ausgabe Für die Beispiel-Liste IN_IDS mit 15 IDs und einem CHUNK_SIZE von 5: ID: 1, Name: John, Salary: 5000 ID: 2, Name: Jane, Salary: 6000 ... ID: 15, Name: Alice, Salary: 7000 Möchtest du weitere Details oder Anpassungen?

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert