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