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:
Der Job steht auf CCSID 273. Aber ich möchte ja auch nicht, dass das UCS-2 Feld nach 273 konvertiert wird.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
Hier noch der Cobol Code Ausschnitt der die einzelnen Positionen im Rückgaberecord setzt:
Gibts dafür eine Lösung?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.
Gruß
Matthias
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks