PDA

View Full Version : SQL Frage zu "execute immediate"



a.wojcik
18-07-16, 09:24
Hallo *All,

ich habe folgende Aufgabe :
es müssen max. 50 Pgm Variablen mit dem Wert aus einer Datei gefüllt werden.
Dazu wollte ich etwas schlauer sein und habe ich mir folgende Lösung ausgedacht :

D XCol01 S 3 0
:
:
D XCol50 S 3 0
D FTZhl S 3 0 (Zähler 1 - 50)

In der Do Schleife mache ich pro Lesevorgang :
FTZhl += 1;
SQLStm = 'Set :' + 'XCol' + %editc(FTZhl:'X') + ' = ' + %editc(XLAENGE:'Z');

EXEC SQL
execute immediate :SQLStm ;

Beim Debuggen sehe ich :

> EVAL sqlstm SQLSTM =
....5...10...15...20...25...30...35...40...45...50 ...55...60
'Set :XCol01 = 1 '

aber nach "execute" bekome ich SQLCODE = -312, Variable nicht deklariert oder nicht verwendbar.

Funktioniert "set " über "execute immediate" auf diese Weise nicht ?
Kann man das irgendwie anders (ohne IF's !) lösen ?

Schöne Grüsse

A. Wojcik

Fuerchau
18-07-16, 09:35
Ich weiß ja nicht, was du mit dem Set erreichen willst.
Hostvariablen gehen nicht im dynamischen SQL.

Statt XCol01-XCol50 verwende doch einfach:
D xCol S 3 0 dim(50)
D xI 5I 0

for xI = 1 to 50;
xCol(xI)=xI;
next;

B.Hauser
18-07-16, 09:50
Host-Variablen kann man schon verwenden, jedoch nicht in dieser Form und weder beim SET noch beim SELECT ... INTO und auch nicht als Ausgabe-Parameter in Verbindung mit EXECUTE IMMEDIATE!
Beim VALUES INTO können Host-Variablen in Form von Parameter-Markern (?) verwendet werden. Beim EXECUTE kann die Host-Variable mit USING angegeben werden.

Birgitta

a.wojcik
18-07-16, 09:54
Hi,

ich danke Euch !

mit SQL kan man viel zaubern, aber manchmal muss auch RPG sein...

A. W.