-
SQL0332: Zeichenumsetzung zwischen CCSID 13488 und CCSID 65535 ungültig
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
-
Wenn du mit SQLDA umgehst muss für Konvertierungen die CCSID in dem entsprechenden SQLVAR mit ausgegeben werden. Der Default ist hier tatsächlich *HEX.
Schau dir diesbezüglich noch mal die SQLVAR-Definition an, hier gibts auch eine CCSID-Angabe (default 0 = Hex).
-
Danke für deine Antwort.
Das hilft mir schon weiter.
-
Hallo zusammen!
Ich habe genau das gleiche Problem wie Matthias, möchte ein "G" Feld unkonvertiert (ccsid 1200) weiterverarbeiten und erhalte konsequenterweise den gleichen Fehler.
Ich habe schon den SQLNAME entsprechend gesetzt, muss am SELECT ebenfalls etwas gemacht werden (=> CAST ?)
Danke schon mal vorab!
Andi
-
Wenn du mit SQLDA umgehst musst du die Feldtypen für den Fetch schon genau spezifizieren.
Wenn du keine Umsetzung möchtest, musst du als Zielvariable einen Binärfeldtyp mit ausreichend großem Puffer wählen.
Für Fixed-Binary gilt der Feldtyp 912/913, für varying Binary 908/909 (Siehe SQL-Reference).
Beim Describe Table/Statement erhältst du auch die CCSID in der SQLDA, so dass du explizit entscheiden kannst.
Wandelst du in CHAR um, muss ja eine Umsetzung erfolgen, in diesem Fall ist die CCSID in der SQLDA anzugeben.
Bei fehlender Angabe wird eben die JOB-CCSID verwendet, was bei *HEX zum Fehler führt.
CCSID values in SQLDATA or SQLNAME In the OPEN, FETCH, CALL, and EXECUTE statements, the SQLNAME field of
the SQLVAR element can be used to specify a CCSID for string host variables. If
the SQLNAME field is used to specify a CCSID, the SQLNAME length must be set
to 8. In addition, the first 4 bytes of SQLNAME must be set as described in the
table below. If no CCSID is specified, the job CCSID is used.
In the DESCRIBE, DESCRIBE TABLE, and PREPARE statements, the SQLDATA
field of the SQLVAR element contains the CCSID of the column of the result table
if that column is a string column. The CCSID is located in bytes 3 and 4 as
described in Table 123. Table 123. CCSID values for SQLDATA or SQLNAME Data Type
Encoding
Scheme Bytes 1 & 2 Bytes 3 & 4 Character SBCS data X'0000' ccsid
Character Mixed data X'0000' ccsid
Character Bit data X'0000' 65535
Graphic Not Applicable X'0000' ccsid Any other data type Not Applicable Not Applicable Not Applicable
Similar Threads
-
By codierknecht in forum NEWSboard SAP
Antworten: 32
Letzter Beitrag: 09-02-18, 13:00
-
By schatte in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 08-02-11, 17:36
-
By ah1960 in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 30-06-08, 15:03
-
By angelone in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 20-04-07, 11:50
-
By Atomik in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 02-08-02, 14:01
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