-
Brauche Hilfe zu FETCH USING DESCRIPTOR
Hallo zusammen.
Dies ist eine etwas überarbeitete Kopie aus dem iseries AS/400 Forum, aber diesmal im "richtigen" Forum :-)
Ich bin am verzweifeln beim Zusammenbauen eines dynamischen SQL Statements.
Die ausgewählten Felder werden erst zur Laufzeit festgelegt.
Ich habe eine SQLDA entsprechend SQL Reference aufgebaut.
Hier, was im Beispiel des Handbuches steht (leider ist das Beispiel für PL1, aber der Unterschied scheint nur im "fehlenden" END-EXEC zu bestehen...
EXEC SQL PREPARE STMT1_NAME FROM :STMT1_STR;
... /* code to set SQLN to zero and to allocate the SQLDA */
EXEC SQL DESCRIBE STMT1_NAME INTO :SQLDA;
... /* code to check that SQLD is greater than zero, to set */
/* SQLN to SQLD, then to re-allocate the SQLDA */
EXEC SQL DESCRIBE STMT1_NAME INTO :SQLDA;
... /* code to prepare for the use of the SQLDA */
EXEC SQL OPEN DYN_CURSOR;
... /* loop to fetch rows from result table */
EXEC SQL FETCH DYN_CURSOR USING DESCRIPTOR :SQLDA;
Hier nun mein Sorgenkind
D SQL_NUM C CONST(2)
D SQLDA DS
D SQLDAID 1 8A
D SQLDABC 9 12B 0
D SQLN 13 14B 0
D SQLD 15 16B 0
D SQL_VAR 80A DIM(SQL_NUM)
D SQLVAR DS
D SQLTYPE 1 2B 0
D SQLLEN 3 4B 0
D SQLRES 5 16A
D SQLDATA 17 32*
D SQLIND 33 48*
D SQLNAMELEN 49 50B 0
D SQLNAME 51 80A
C*SQL_NUM ist die hier benutze Anzahl Felder
STMT='SELECT FELD1, FELD2 FROM DATEI'
C/EXEC SQL
C+ PREPARE S1 FROM :SQLSTMT
C/END-EXEC
SQLN = *ZEROS
C/EXEC SQL
C+ DESCRIBE S1 INTO :SQLDA
C/END-EXEC
IF SQLD<= 0
return
endif
sqln = sqld
C/EXEC SQL
C+ DESCRIBE S1 INTO :SQLDA
C/END-EXEC
C* Jetzt steht nach debug tatsächlich sauber in der SQLDA die "Feldinfo" in der SQL_VAR Tabelle. Die Pointer SQLDATA und SQLIND sind nicht *NULL!
C* Open Cursor
C/EXEC SQL
C+ OPEN C1
C/END-EXEC
C dow sqlcod = 0
* Fetch a row
C/EXEC SQL
C+ FETCH NEXT FROM C1 USING DESCRIPTOR :SQLDA
C/END-EXEC
C SQLCOD IFNE 0
C LEAVE
C ENDIF
C ENDDO
C/EXEC SQL
C+ close c1
C/END-EXEC
C MOVE *ON *INLR
Nach dem Fetch ist der SQL Code auf -822.
Im Joblog steht:
PREPARE für Anweisung S1 beendet
DESCRIBE für vorbereitete Anweisung S1 beendet
DESCRIBE für vorbereitete Anweisung S1 beendet
Blockung für Abfrage
Cursor C1 eröffnet
SQLDA enthält ungültige Adresse
-- Art 1 gibt an, daß die SQLDATA-Adresse ungültig ist
Ich hab nun schon versucht, einfach pointer einzustellen, die auf eine leer DS weisen, aber das bringts auch nicht. Hat jemand von euch/Ihnen ein Beispielprogramm oder einen Tip, was da mit "allocate SQLDA" und reallocate SQLDA gemeint ist und wie das funktioniert??
Verwendetes Release in V4R5
Danke
Andreas
***Wer einen Schreibfehler findet darf ihn behalten***
Similar Threads
-
By AndreasH in forum IBM i Hauptforum
Antworten: 13
Letzter Beitrag: 08-05-15, 13:09
-
By kuempi von stein in forum NEWSboard Java
Antworten: 3
Letzter Beitrag: 07-07-06, 16:03
-
By chullain in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 29-03-06, 09:18
-
By HoScHiE in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 28-09-01, 14:20
-
By hs in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 26-09-01, 09:02
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks