View Full Version : mit SQL in ein array lesen
Hallo Ihr Wissenden,
ich versuche mit SQL in eine Feldgruppe zu lesen
D wert DS DIM(99) QUALIFIED
D we 7S 0
C *ENTRY PLIST
C PARM FeWe
C PARM WERT
C/EXEC SQL
C+ SET :wert =(
C+ select xxwert from DateiA
C+ where (xxa, xxb)
C+ in(select yya, yyb from DateiB where feld=:FeWe)
C+ group by xxwert)
C/END-EXEC
Das geht nicht!
SQL0312 30 34 Position 14 Variable wert nicht definiert oder nicht
verwendbar. Reason: The host structure is a dimensioned
array.
Toll, gibt es eine alternative? Danke
Dietlinde Beck
Leider nur Occurs.
Die Ansprache ist dann nicht in Klammern sondern man muss per Occur(n) auf den Satz setzen.
Allerdings gibt es einen kleinen Trick.
d MyOcurDs ds occurs(nn)
d MyPtr * inz(%addr(MyOcurDS))
d MyDimDs ds dim(nn) based(MyPtr)
Falls der Compiler den Inz ablehnt, kann man den zur Laufzeit auch festlegen.
andreaspr@aon.at
19-01-19, 16:59
Hallo,
eigentlich sollte das ganz normal gehen. Probier es mal so:
D wert DS DIM(99) QUALIFIED
D we 7S 0
C *ENTRY PLIST
C PARM FeWe
C PARM WERT
Exec Sql Declare c1 Cursor for
select xxwert from DateiA
where (xxa, xxb)
in(select yya, yyb from DateiB where feld=:FeWe)
group by xxwert;
Exec Sql open c1;
Exec Sql Fetch c1 For 99 Rows Into :wert;
lg Andreas
Mit Cursor ja, Statisch wie vom TE gechrieben nein.
Ich persönlich arbeite auch lieber ohne Cursor...
Hallo Andreas, vielen Dank
es ist zwar etwas umständlicher aber es geht so.
Danke
VG
DiBe
Wie willst du ohne Cursor mehrere Zeilen bearbeiten;-)?
dschroeder
21-01-19, 13:17
Wenn das mit dem Cursor geht (wie von Andreas beschrieben), geht es dann vielleicht auch mit select into? (Das würde den Cursor sparen)
Exec Sql select xxwert into :wert from DateiA
where (xxa, xxb)
in(select yya, yyb from DateiB where feld=:FeWe)
group by xxwert
fetch first 99 rows only;
(Ich habe es nicht ausprobiert)
Dieter
Der wesentliche Unterschied ist, dass ein "Select ... Into ..." ausschließlich maximal 1 Ergebniszeile erlaubt. Somit stellt sich das DIM-Problem da nicht.
The SELECT INTO statement produces a result table consisting of at most one row,
and assigns the values in that row to variables.
Only one row may be specified in the fetch-first-clause.