« WordPress: Fehler beim Laden des Stylesheets: Ein unbekannter Fehler ist aufgetreten (805303f4) | Startseite | SVN: Nach einem Commit automatisch die Webseite aktualisieren (Post-Commit Hook) »
Oracle: Dynamischen SQL Befehl in einer LOOP
Günther | 22.07.2010
In Oracle können Sie auch dynamische SQL Statements als Datenquelle für SQL Abfragen nutzen. Aber nicht nur diese Technik wird im folgenden Beispiel erklärt.
Zusätzlich können Sie die Daten des dynamischen SQL Statements auch in einer Schleife (Loop) abarbeiten lassen und dadurch auch mehrere Befehl für jeden Datensatz (Record) verarbeiten. Sie haben dadurch die Möglichkeit, komplexe Verarbeitungen (Befehle) in mehrere einzelne Befehle auszuteilen (zu splitten):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | CREATE OR REPLACE PROCEDURE TEST (in_Filter IN NUMBER) IS Ssql varchar2(2000); TYPE c1 IS REF CURSOR; the_cursor c1; BEGIN -- SQL Basis (Basisstatement) Ssql := 'select distinct kunde.id as kunde_id FROM customer kunde WHERE kunde.status = 1'; -- Filter and das Statement anhängen (wenn ein Filter vorhanden) IF (in_Filter IS NOT NULL) THEN Ssql := Ssql || ' AND kunde.code = ' || in_Filter; END IF; -- Daten auslesen OPEN the_cursor FOR Ssql; -- Für jeden gefundenen Kunden Aktionen verarbeiten LOOP fetch the_cursor INTO tmp_kunde_id; EXIT WHEN the_cursor%NOTFOUND; -- Historie löschen DELETE FROM customer_state WHERE customer = tmp_kunde_id AND week < (SELECT TO_NUMBER(TO_CHAR(SYSDATE,'IW')) AS week FROM dual); -- Stati des Kunden kopieren INSERT INTO customer_invoices (customer,STATUS,week) SELECT cust_id, state_id, week FROM state_tbl WHERE STATUS > 0 END loop; close the_cursor; END; |
Kategorie: Anleitungen, Oracle | Keine Kommentare »