View Full Version : Variable innerhalb von EXEC SQL nutzen
Hallo zusammen,
ich rufe über ein CL ein SQLRPG auf. Dabei übergebe ich Variablen. Diese möchte ich gerne innerhalb von EXECSQL nutzen. Leider kommt die Meldung "Spalte oder Globale Variable nicht gefunden"
Nun zu meiner Frage.. muss ich Variablen zusätzlich im EXEC SQL deklarieren?
Danke im voraus.
_MG_
Die Variabeln fangen mit einen Doppelpunkt an.
Im RPG ->>> MeinFeld
im SQL-Teil ->>> :MeinFeld
Gruß
Ronald
andreaspr@aon.at
12-01-17, 10:33
Für Variablen benötigst du den Doppelpunkt ':'.
Du kannst die Variablen aber nur beschränkt einsetzten, z.B. als Werte:
Exec Sql Insert Into Tab1 values ('Wert1', 4711, :myHostVariable);
Wenn du die Variable z.B. für den Tabellennamen verwenden willst, benötigst du dynamisches SQL.
lg Andreas
Danke schonmal.. das hatte ich eigentlich beachtet
Beispielcode:
EXEC SQL
DECLARE C1 SCROLL CURSOR FOR
select Feld,Feld2,Feld3,Feld4,Feld5from Bib/Datei
where Datei.Feld BETWEEN :SQLVON AND :SQLBIS AND
Feld1='N' AND
Feld2= :SQLFI AND
Feld3= :SQLFA AND
Feld4='00'
OR ...
Ist das in der Art und Weise möglich?
andreaspr@aon.at
12-01-17, 10:58
Wie sieht die Fehlermeldung im Detail aus?
Welche Variable konnte er nicht finden?
Seit V7 werden Tippfehler leider nicht mehr vom Compiler sondern erst zur Laufzeit bestraft.
Der Compiler hält zunächst mal alle nicht gefundenen Variablen oder Felder des SQL's für später verfügbare globale Variablen was SQL dann zur Laufzeit eben bei Nichtvorhandensein bestraft.
Häufig ist das dann in der Quelle nur ein fehlender Doppelpunkt vor einer Hostvariable, was man leider nur zu leicht überliest.
Was mir immer noch angeraten worden ist,
eigene Variabeln sollten nicht mit SQL beginnen.
Der Compiler erstellt bei der Umsetzung des SQLs selber jede Menge Variabeln die mit SQL beginnen.
Nicht das es da mal zu Konflikten kommt, weil man zufällig den gleichen Namen verwendet.
Bzw. bei irgend einem Relaiswechsel die IBM neue Variabeln einführt, die sich dann mit den eigenen beißen.
Gruß
Ronald
Werden die Variablen als Parameter übergeben, hat der SQL Precompiler bisweilen Probleme diese zu finden und zuzuordenen.
Versuche mal zusätzliche Variablen zu generieren, die Du mit den im SQL verwendeten Parameter-Werten versorgst und anschließend als Host-Variablen im SQL-Statement einsetzt.
Birgitta
... oder das prüft, was bisher nicht geprüft wurde - hatten wir alles schon...
D*B
Hallo zusammen und Danke für die vielen Antworten,
der fehler lag ganz unspektakulär bei einem falsch übergeben Parameter. Ich finde die Fehlermeldung der as400 an dieser Stelle echt kompliziert bzw. etwas ungenau..
Trotzdem nochmal Danke. In den Beiträgen war sehr viel Wissenswertes.
grüße und ein schönes Wochenende
MG