[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2006
    Beiträge
    348

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2006
    Beiträge
    348
    Danke für deine Antwort.
    Das hilft mir schon weiter.

  4. #4
    Registriert seit
    Jul 2001
    Beiträge
    177

    Question

    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

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. Konvertierung nach Graphic --> CCSID Problem
    By codierknecht in forum NEWSboard SAP
    Antworten: 32
    Letzter Beitrag: 09-02-18, 13:00
  2. Zeichenumsetzung zwischen CCSID 273 und CCSID 8612 ungültig
    By schatte in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 08-02-11, 17:36
  3. Keine Zeichenumsetzung zu CCSID 13488
    By ah1960 in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 30-06-08, 15:03
  4. CCSID 65535
    By angelone in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 20-04-07, 11:50
  5. CCSID 65535
    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
  •