Anmelden

View Full Version : Exec SQL INSERT INTO und Array?



SourceCoder
24-01-13, 15:31
Schönen guten Abend Zusammen,

ich habe ein Problem wo Hilfe gebrauchen kann, bitte beachtet das ich mich im ersten Ausbildungsjahr befinde und nicht alles perfekt ist.

Bei der Umwandlung bekomme ich die Fehlermeldung:

SQL5011 30 57 Position 49 Bereich der Host-Struktur FNAME nicht
definiert oder nicht verwendbar.




D Main PR Extpgm('CHKLFSSRC')
D Pbibo 10A
D Pfile 10A
D Pdate 6 0
D Main PI
D Pbibo 10A
D Pfile 10A
D Pdate 6 0
/* ************************************************** **********************
d system pr 10I 0 EXTPROC('system')
d * value OPTIONS(*STRING)
d cpfmsg s 7A IMPORT('_EXCP_MSGID')
/* ************************************************** **********************
D FName 100A Dim(512)
/* ***************Programm Vaiablen****************************************
D FSRC 20A
D Name 10A
D Count S 6 0
d i 4S 0 Inz

/* ************************************************** **********************
C/exec sql
C+ set option DatFmt = *iso, Commit = *none, CloSqlCsr = *endmod
C/end-exec
/FREE
FSRC = Pbibo + '/' + Pfile;
System('CRTPF FILE(QTEMP/LISTOUT) RCDLEN(80)');
System('DSPFD FILE(' + FSRC + ') TYPE(*MBRLIST) +
OUTPUT(*OUTFILE) OUTFILE(QTEMP/LISTIN');

EXEC SQL Declare MyCs Cursor FOR
SELECT MLNAME FROM
QTEMP/LISTIN
where DEC(MLCHGD) <= :Pdate;

Exec SQL Open MyCs;
Exec SQL FETCH MyCs FOR 512 ROWS INTO :FName;
Count = SQLER3;
Exec SQL Close MyCs;

FOR i=1 by 1 to 512;
clear Name;
Name = FName(i);
Exec SQL INSERT INTO QTEMP/LIST (LIST) VALUES(:Name);
EndFor;

*InLr=*On;
/END-FREE

mk
24-01-13, 15:37
Hallo,

das Feld FName ist in deinem Code
vieleicht mehrfach definiert.

Deshalb weiß der Compiler nicht was gültig ist.

gruß
Michael

B.Hauser
24-01-13, 15:42
SQL kann keine Feldgruppen/Arrays verarbeiten, sondern nur Array-Datenstrukturen.
Du musst Dein Ausgabe-Feld wie folgt definieren:


D MyOutDS DS Dim(512) Qualified
D FName 100A

Die einzelnen Unterfelder/Elemente musst Du dann wie folgt ansprechen:


/Free
MyOutDS(Index).FName = '123';
If MyOutDS(Index).FName = 'AAAAA';

Birgitta

mk
24-01-13, 15:45
Oh, sorry

ich hatte nur die Meldung beachtet.

Birgitta hat natürlich recht:)

SourceCoder
25-01-13, 08:33
Danke für den Tipp habe ich nun umgesetzt aber der Fehler ist geblieben, hier aktuelle Code: D Main PR Extpgm('CHKLFSSRC') D P - Pastebin.com (http://pastebin.com/53MuVR4w)

Und die Fehlermeldung:

SQL0312 30 65 Position 59 Variable OUTPUT nicht definiert oder nicht
verwendbar.

Vielleicht noch als Info MLNAME ist ein Char Feld mit der Länge 10.

BenderD
25-01-13, 08:44
... so wie Du es deklariert hast, ist ouutput Teil der DS und damit des arrays, muss also qualifiziert und mit Index verwendet werden.

D*B

SourceCoder
25-01-13, 08:48
Super danke hab es einfach übersehen, die kleinen Fehler sind wirklich die schlimmsten.