PDA

View Full Version : mit SQL in ein array lesen



dibe
18-01-19, 14:25
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

Fuerchau
18-01-19, 17:22
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

ExAzubi
21-01-19, 10:17
Mit Cursor ja, Statisch wie vom TE gechrieben nein.

Ich persönlich arbeite auch lieber ohne Cursor...

dibe
21-01-19, 10:44
Hallo Andreas, vielen Dank
es ist zwar etwas umständlicher aber es geht so.
Danke
VG
DiBe

Fuerchau
21-01-19, 12:05
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

Fuerchau
21-01-19, 13:52
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.