SQL PL - SELECT INTO (var) in INSERT INTO einbauen um aktuelle Zeile abzurufen
Hallo zusammen
Ich würde gern ein SELECT INTO in einem "INSERT INTO" einbauen, damit ich einen Wert holen kann der sich auf die aktuelle Zeile bezieht.
Mir ist bewusst das ein INSERT INTO Statement jedes mal alle Daten die der Bedingung zutreffen in die Zieltabelle schreibt. Nun frage ich mich ob es eine Möglichkeit gibt das INSERT INTO Zeilenweise durchzuführen?
Ich hab das ganze in einem Codebeispiel ein wenig verständlicher dargestellt wie ich das gern haben möchte... Das INSERT INTO sollte in dem Fall durch ein Statement ersetzt werden, welches die Daten Zeilenweise in die Zieltabelle schreibt und die Sourcezeile dann ändert, wenn die Zeile oft genug durchgearbeitet wurde (i = c).
Die Prozedur soll anhand der Anzahl Buchstaben im Datenfeld von der Spalte 'CODE' den Loop mehrfach durchführen.
Hoffe es ist genug verständlich..
Bin für jede Hilfe Dankbar
Gruss gabrixl
Ich würde gern ein SELECT INTO in einem "INSERT INTO" einbauen, damit ich einen Wert holen kann der sich auf die aktuelle Zeile bezieht.
Mir ist bewusst das ein INSERT INTO Statement jedes mal alle Daten die der Bedingung zutreffen in die Zieltabelle schreibt. Nun frage ich mich ob es eine Möglichkeit gibt das INSERT INTO Zeilenweise durchzuführen?
Ich hab das ganze in einem Codebeispiel ein wenig verständlicher dargestellt wie ich das gern haben möchte... Das INSERT INTO sollte in dem Fall durch ein Statement ersetzt werden, welches die Daten Zeilenweise in die Zieltabelle schreibt und die Sourcezeile dann ändert, wenn die Zeile oft genug durchgearbeitet wurde (i = c).
CREATE OR REPLACE PROCEDURE test_cr_we_lndlc
IS
i NUMBER;
c NUMBER;
row NUMBER;
BEGIN
row := 1;
LOOP -- LOOP für einzelne Zeilen von Quelltabelle
i := 1;
LOOP -- LOOP falls eine Zeile aus der Quelltabelle mehrmals durchgeführt werden soll
INSERT INTO cr_we_lndlc (wareneingang_id, lndlc_id, buchdat)
SELECT cw.wareneingang_id, cl.lndlc_id, cw.buchdat
FROM cr_wareneingang.ROW cw -- .Row gibt an welche Zeile aktuell verarbeitet wird
LEFT JOIN cr_lndlc cl
ON ( cl.CODE = REGEXP_SUBSTR (cw.dlcode, '\D', i)
AND cl.EXTID = REGEXP_SUBSTR (cw.dlcode, '\d+', i));
SELECT REGEXP_COUNT (dlcode, '\D') INTO c FROM cr_wareneingang.ROW; -- Anhand aktueller Zeile wird Wert c festgelegt
i := i + 1;
EXIT WHEN i = c;
END LOOP;
row := row + 1;
END LOOP;
END;
Die Prozedur soll anhand der Anzahl Buchstaben im Datenfeld von der Spalte 'CODE' den Loop mehrfach durchführen.
Hoffe es ist genug verständlich..
Bin für jede Hilfe Dankbar
Gruss gabrixl
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 346248
Url: https://administrator.de/contentid/346248
Ausgedruckt am: 23.11.2024 um 21:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo gabrixl,
mir geht es zwar ähnlich wie ukulele, daß ich Dein Problem nicht ganz verstehe und meine Oracle-Zeiten sind auch schon ein paar Jahre her.
Aber wenn Du eine Tabelle zeilenweise wie in einer Schleife abgearbeitet haben willst, dann suchst Du möglicherweise etwas, das sich Cursor nennt. In SQL Server geht das dann in der Art: "declare xy cursor for select Spalte from Tabelle where Bedingung order by Sortierung". In Oracle war das auch so ähnlich.
Gruß, Mad Max
mir geht es zwar ähnlich wie ukulele, daß ich Dein Problem nicht ganz verstehe und meine Oracle-Zeiten sind auch schon ein paar Jahre her.
Aber wenn Du eine Tabelle zeilenweise wie in einer Schleife abgearbeitet haben willst, dann suchst Du möglicherweise etwas, das sich Cursor nennt. In SQL Server geht das dann in der Art: "declare xy cursor for select Spalte from Tabelle where Bedingung order by Sortierung". In Oracle war das auch so ähnlich.
Gruß, Mad Max