Hallo Leute,
zur Ausführung von SQL Abfragen verwenden wir ein zentrales SQLCBLLE Programm.
Dieses Programm bekommt den SQL-String übergeben und als Rückgabe erhält man eine Variable PIC X(8192) die jeweils eine Ergebniszeile enthält.
Die Befüllung dieses Rückgabestrings erfolgt mithilfe von SQLDA Pointerzuweisungen an die entsprechende Position.
Dies funktioniert soweit auch sehr gut. Wenn jedoch in der abgefragten Tabelle ein GRAPHIC 13488 Feld enthalten ist erscheint folgende Joblog Meldung:
Code:
Weitere Nachrichteninformationen
Nachrichten-ID . . . . : SQL0332 Bewertung . . . . . . : 30
Nachrichtenart . . . . : Diagnose
Sendedatum . . . . . . : 11.05.12 Sendezeit . . . . . . : 10:38:44
Nachricht . . . : Zeichenumsetzung zwischen CCSID 13488 und CCSID 65535
ungültig.
Ursache . . . . : Es wurde versucht, eine Zeichen- oder Grafikumsetzung für
nicht verträgliche Daten durchzuführen. Eine Umsetzung zwischen CCSID 13488
und CCSID 65535 ist nicht definiert.
Ist eine CCSID 65535, ist die andere CCSID eine Grafik-CCSID. Die
Umsetzung zwischen der CCSID 65535 und einer Grafik-CCSID ist nicht
definiert.
Handelt es sich um eine Anweisung CONNECT, ist die Umsetzung zwischen der
Standard-SBCS-CCSID des Anwendungs-Requesters und der SBCS-CCSID des
Anwendungsserver nicht definiert. Ist die zweite CCSID 0, wurde die
Standard-SBCS-CCSID des Anwendungsservers nicht zurückgegeben. Ein
Weitere ...
Eingabetaste --> Weiter
F3=Verlassen F6=Drucken F9=Nachrichtendetails anzeigen F12=Abbrechen
F21=Unterstützungsstufe auswählen
Der Job steht auf CCSID 273. Aber ich möchte ja auch nicht, dass das UCS-2 Feld nach 273 konvertiert wird.
Hier noch der Cobol Code Ausschnitt der die einzelnen Positionen im Rückgaberecord setzt:
Code:
* RECORDPOSITIONEN FÜR DIE EINZELNEN FELDER BERECHNEN
MOVE 1 TO POS-WRK.
PERFORM VARYING COUNTER-WRK FROM 1 BY 1 UNTIL COUNTER-WRK >
SQLD OF SQLDA
* PASST DIE SQL-ERGEBNISTABELLE NOCH X-RETURNREC ?
IF POS-WRK > LENGTH OF X-RETURNREC
* SCHLEIFE WEITER AUSFÜHREN, UM ANZAHL BYTE DER
* SQL-ERGEBNISTABELLE ZU BERECHNEN
MOVE -1 TO SQLCODE
ELSE
SET SQLDATA OF SQLVAR OF SQLDA(COUNTER-WRK) TO
ADDRESS OF X-RETURNREC(POS-WRK:1)
END-IF
EVALUATE SQLTYPE OF SQLVAR OF SQLDA(COUNTER-WRK)
* PACKED UND ZONED DECIMAL
WHEN 484
WHEN 488
WHEN 489
SET SQLIND OF SQLVAR OF SQLDA(COUNTER-WRK)
TO ADDRESS OF NULL-IND
DIVIDE SQLLEN OF SQLVAR OF
SQLDA(COUNTER-WRK) BY 256 GIVING
DECIMAL-WRK REMAINDER LEN-WRK
ADD DECIMAL-WRK TO POS-WRK
* CHARS
WHEN 452
SET SQLIND OF SQLVAR OF SQLDA(COUNTER-WRK)
TO ADDRESS OF NULL-IND
ADD SQLLEN OF SQLVAR OF SQLDA(COUNTER-WRK)
TO POS-WRK
* FIXED-LENGTH GRAPHIC STRING
WHEN 468
WHEN 469
SET SQLIND OF SQLVAR OF SQLDA(COUNTER-WRK)
TO ADDRESS OF NULL-IND
COMPUTE POS-WRK = POS-WRK +
(SQLLEN OF SQLVAR OF SQLDA(COUNTER-WRK) * 2)
END-COMPUTE
* SUM / AVG UND ANDERE ARITHMETISCHE TYPEN
WHEN 485
SET SQLIND OF SQLVAR OF SQLDA(COUNTER-WRK)
TO ADDRESS OF NULL-IND
DIVIDE SQLLEN OF SQLVAR OF
SQLDA(COUNTER-WRK) BY 496 GIVING
DECIMAL-WRK REMAINDER LEN-WRK
ADD DECIMAL-WRK TO POS-WRK
* ALLE ANDEREN WERDEN WIE CHARS BEHANDELT
WHEN OTHER
SET SQLIND OF SQLVAR OF SQLDA(COUNTER-WRK)
TO ADDRESS OF NULL-IND
ADD SQLLEN OF SQLVAR OF SQLDA(COUNTER-WRK)
TO POS-WRK
END-EVALUATE
END-PERFORM.
Gibts dafür eine Lösung?
Gruß
Matthias
Bookmarks