Anmelden

View Full Version : Embedded SQL Insert aus Feldgruppe



SMuchowsky
29-09-10, 10:34
Hallo Forum!
Ich möchte gern in RPG den Inhalt einer Feldgruppe (z.B. FG1) für ein SQL Insert nutzen.
Meine Feldgruppe enthält 24 Datensätze, die ich zuvor gefüllt habe und diese möchte ich in 24 Felder einer Tabelle einfügen.

Also vereinfacht dargestellt z.B.:

C/EXEC SQL
C+ INSERT INTO TABELLE (FELD1, FELD2, ...) VALUES (:FG1(1), :FG1(2), ...)
C/END-EXEC

Leider kommt SQL mit der Klammer in dem Variablennamen nicht klar.
Gibt es eine Möglichkeit das Problem zu umgehen? Oder vielleicht eine andere Lösung?

Gruß
Sven-Arne

malzusrex
29-09-10, 11:20
Hi Sven-Arne,

versuch mal folgendes


d DSfg ds
d fg_01 7 0
d fg_02 7 0
d fg_03 7 0
d ..........
d fg_23 7 0
d fg_24 7 0
d FG Overlay ( DSfg ) Like( fg_01 )
d Dim( 24 ) Inz( *Zeros )

C/EXEC-SQL
C+ INSERT INTO TABELLE (FELD1, FELD2, ...) VALUES (:FG_01, :FG_02, ...)
C/END-EXEC

Ich habe dein Feld FG mal jetzt einfach auf 7,0 definiert.
Gruß
Ronald

B.Hauser
29-09-10, 11:45
Was hast Du denn in einem Element? Einen Spalten-Wert oder den ganzen Datensatz?

Bei Spalten-Werten sollte die Lösung von Ronald funktionieren, wobei ...
Wenn alle Felder, die eingefügt werden sollen mit der richtigen Definition und in der richtigen Reihenfolge in der Datenstruktur stehen, kann auch die Datenstruktur verwendet werden:


Exec SQL
Insert into MyTable
(Col1, Col2, ... ColN)
Values(:myDS);


Wenn mehrere Datensätze eingefügt werden sollen, sollten diese nicht in einer Feldgruppe, sondern in einer Array-Datenstruktur (oder auch Mehrfach-Datenstruktur) hinterlegt werden.
Bei Mehrfach-Datenstrukturen oder Array-Datenstrukturen können mehrere Datensätze auf einmal eingefügt werden, sofern natürlich der Satz-Aufbau stimmt:


Exec SQL
Insert into MyTable
(Col1, Col2, ... ColN)
x Rows Values(:MyArrDS);

wobei x die Anzahl der Array-Elemente (DIM oder OCCUR) ist.

Birgitta

SMuchowsky
29-09-10, 11:49
Vielen Dank euch beiden für die Hilfe!
Ich habe es jetzt mt der Lösung von Ronald geschafft.

Gruß
Sven-Arne