Anmelden

View Full Version : FETCH n ROws in einzelne Felder einer DS



pedro-zapata
11-09-06, 09:32
Hallo,

komme mit meinen Kenntnissen gerade nicht weiter!
Habe eine extern definierte Datenstruktur die im Cobol-Pgm per DDS eingebunden wird.

Nun soll, je nach definiertem/geöffneten Cursor, unterschiedliche Felder dieser DFS beim Fetch gefüllt werden. Das klappt auch soweit.

Wenn ich aber z.B. 8 Zeilen auf einmal fetchen will ist das Referenzieren einzelner Felder nicht mehr möglich.
DIE DS:
01 LT00-SATZ.
02 ARRAY OCCURS 8 INDEXED BY DI-IDX.
COPY DDS-ALL-FORMATS OF LT00PF.
05 LT00PF-RECORD PIC X(390).
05 LT00R REDEFINES LT00PF-RECORD.
06 FELD1 pic X(30).
Von Ort
06 FELD2 PIC X(30).
Nach Ort

Der Cursor: DECLARE C_SUMMEN1 SCROLL CURSOR FOR

SELECT FELD1, FELD2,
SUM(FELD3),
SUM(FELD4)
FROM SQLRESULT
GROUP BY
FELD1, FELD2

der Fetch: EXEC SQL
FETCH C_SUMMEN1 FOR 8 ROWS
INTO
:FELD1 , :FELD2
END-EXEC

Der Precompiler meldet das die Felder nicht definiert bzw. nicht verwendbar sind.

Was mache ich falsch??

Fuerchau
11-09-06, 09:36
Beim Fetch mehrerer Zeilen ist nur die Angabe einer Struktur erlaubt:

FETCH C_SUMMEN1 FOR 8 ROWS
INTO
:ARRAY

pedro-zapata
11-09-06, 09:43
Danke für die prompte Antwort.
Schade das das nicht geht:(
Da hätte ich noch lange tüfteln können.

BenderD
11-09-06, 10:03
was in jedem Fall geht:

select Feld1, Feld2, Feld3
into :myAry

select '', Feld2, ''
into :myAry

passen in das selbe Array of structure

damit müsste das doch gehen, wenn ich die Frage richtig verstehe.

mfg

Dieter Bender


Danke für die prompte Antwort.
Schade das das nicht geht:(
Da hätte ich noch lange tüfteln können.

pedro-zapata
11-09-06, 10:41
Das geht, aber mein Ziel war es Bildschirmweise (20 Zeilen) im Block zu füllen.

BenderD
11-09-06, 10:49
geht doch auch mit:

declare cursor c1 as
select Feld1, Feld2, Feld3
...

declare cursor c2 as
select '', Feld2, ''
...
fetch c1 for 20 rows
into :myAry

und ebenso

fetch c2 for 20 rows into :myAry

auch die entsprechenden Summen würden da passen

mfg

Dieter Bender

was in jedem Fall geht:

select Feld1, Feld2, Feld3
into :myAry

select '', Feld2, ''
into :myAry

passen in das selbe Array of structure

damit müsste das doch gehen, wenn ich die Frage richtig verstehe.

mfg

Dieter Bender

Fuerchau
11-09-06, 12:34
Ich glaube, dass liegt hier in der COPY-Anweisung.
Beim Fetch in ein Array MUSS folgende Definitione forliegen:

05 MyArray occurs 20.
10 Field1 pic ...
10 Field2 pic ...

Der COPY fügt eine Stufe dazwischen.
Ausserdem weiß ich nicht, ob der SQL-Pre-Compiler überhaupt mit dieser Form des COPY zurechtkommt.