PDA

View Full Version : Problem mit SET RESULT SETS



KM
15-09-05, 09:14
Folgender SQLRPG-Code liegt hier zugrunde:

D KDARR DS QUALIFIED DIM(30)
D KDNR 7 0
D KDNAM 20C
.
.
C DO 30
C READ KUNDSTAM
C EVAL X = X + 1
C EVAL KDARR(X).KDNR = KDNUMR
C EVAL KDARR(X).KDNAM = %UCS2(KDNAME)
C ENDDO
.
.
C/EXEC SQL
C+ SET RESULT SETS ARRAY :KDARR FOR :X ROWS
C/END-EXEC

Ich versuche hier einfach nur ein ResultSet mit Kundennummern und Kundennamen an ein aufrufendes Programm zurückzugeben. Ich benötige für das aufrufende Programm den Kundennamen im Unicode-Format (deshalb UCS2). Allerdings scheint das nicht zu funktionieren, denn das ResultSet kann im rufenden Programm nicht verarbeitet werden. Die Fehlermeldung besteht leider nur aus kryptischen Zeichen, sodass ich damit nicht viel anfangen kann.
Wenn ich statt des UCS2-Feldes ein Alpha-Feld verwende, dann erhalte ich zwar die Daten im rufenden Programm, jedoch wird keine Codeumwandlung durchgeführt.
Weiß jemand zufällig wie ich UCS2-Felder im ResultSet zurückgeben kann?
Ich könnte zwar auch mit einem Cursor arbeiten und einen SQL-Select ausführen. Ich wollte aber die Datei satzweise verarbeiten, da dies deutlich schneller geht.

Gruß,
KM

Fuerchau
15-09-05, 10:06
Was die Geschwindigkeit angeht, ist der SQL nicht langsamer !
Was die Codepage angeht, muss das Feld für das Resultset auch entsprechend definiert sein:
D KDNAM 20G CCSID(13488)
Also als Typ Graphik und mit der entsprechende CCSID.
Bei UCS2 musst du auch mit einer Verdoppelung der Zeichenbreite rechnen.

KM
15-09-05, 10:43
D KDNAM 20G CCSID(13488)

Damit hab ich's auch schon versucht. Aber das mosert mir der Compiler an. Die Meldung lautet:

Der Parameter für das Schlüsselwort CCSID ist ungültig.

Warum geht es denn nicht mit dem Datentyp "C" ?

Gruß,
KM

Fuerchau
15-09-05, 11:30
Ja stimmt, Datentyp "C" ist ja UCS2 !
Das Problem ist wohl, dass der Job ja in SBCS (also z.B. 273) läuft, bei der Rückgabe also wieder eine Codewandlung in CCSID(273) stattfindet.

Wo läuft das aufrufende Programm ?
Auch dieses arbeitet ja ggf. wieder im SBCS-Modus !

Ich denke der ganze UCS2-Kram läuft nur in Verbindung mit der Aussenwelt (sprich ODBC-Zugriff). In der Innenwelt wird ggf. immer in die Job-CCSID konvertiert.