PDA

View Full Version : Variable innerhalb von EXEC SQL nutzen



Seiten : [1] 2

_MG_
12-01-17, 10:23
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_

malzusrex
12-01-17, 10:33
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

_MG_
12-01-17, 10:55
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?

Fuerchau
12-01-17, 11:05
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.

malzusrex
12-01-17, 11:42
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

B.Hauser
12-01-17, 11:50
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

BenderD
12-01-17, 11:50
... oder das prüft, was bisher nicht geprüft wurde - hatten wir alles schon...

D*B

_MG_
13-01-17, 19:10
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