... viel zu kompliziert eigentlich ...
Meiner Meinung geht das am "einfachsten" mit dem SQL Descriptor.
Ich hab mir da mal ein Beispiel-PGM zusammen gebastelt. Leider gibts darüber nicht viel Dokus bei der IBM.
Aber so sollte es klappen
:
Code:
D vsql s 512
D vtype s 10
D vlength s 10 0
D vresult_ind s 10 0
D vCount S 10 0
D i S 10 0
/Free
//---- Sql Optionen setzen ----
Exec Sql SET OPTION COMMIT=*NONE, CLOSQLCSR=*ENDMOD,
ALWBLK=*ALLREAD, ALWCPYDTA=*YES,
SRTSEQ=*HEX, DLYPRP=*YES;
// SQL Cursor erstellen
vSql = 'Select * From tab1';
Exec Sql Prepare S1 from :vsql;
Exec Sql Declare c1 Cursor For s1;
// Descriptor mit der max. Anzahl der Spalten initialisieren
Exec Sql allocate descriptor 'mydesc' with max 2;
EXEC SQL DESCRIBE S1 Using descriptor 'mydesc';
// Ersten Satz einlesen
Exec Sql open c1;
Exec Sql Fetch c1 into sql descriptor 'mydesc';
// Anzahl der Spalten abrufen
EXEC SQL GET DESCRIPTOR 'mydesc' :vCount = COUNT;
// Alle Spalten mit deren Werte einlesen
For i=0 to vCount;
// Attribute der Spalte einlesen
Exec Sql GET DESCRIPTOR 'mydesc' VALUE :i
:vtype = TYPE,
:vlength = LENGTH,
:vresult_ind = INDICATOR;
if vresult_ind >= 0;
Select;
When vtype = '1'; // Character
exec Sql GET DESCRIPTOR 'mydesc' VALUE :i
:sp2 = DATA;
When vtype = '4'; // Integer
exec Sql GET DESCRIPTOR 'mydesc' VALUE :i
:sp1 = DATA;
endsl;
endif;
endfor;
Exec Sql close c1;
*INLR = *ON;
/End-Free
Bookmarks