[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Mar 2011
    Beiträge
    94

    SQL Fehler 57017 beim Verabreiten des Cursors im SQLRPGLE

    Hallo zusammen,

    das folgenden SQL Statment gibt die Wechselkurse von der Deutschen Bank zurück.
    Führe ich das SQL aus werden die Werte korrekt ausgeben. Wenn ich das SQL nun eingebettet in RPG verwenden wird bei auslesen des Cursors der Fehler 57017 Character conversion is not defined zurückgegeben. Hat jemand ein Idee wir der Fehler abgestellt werden kann?

    SQL Script
    PHP-Code:
    SELECT 
     
    FROM
      XMLTABLE
    ('$doc/Envelope/Cube/Cube/Cube' PASSING XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB
                
    ('https://www.db-markets.com/dbm/portal/FxSettlementRates/31-03-2017','')
              ) 
    AS 
    "doc"
     
    COLUMNS 
       Subject       VarChar
    (30CCSID 1208 Path '../../../Subject',
       
    Sender        VarChar(30CCSID 1208 Path  '../../../Sender/Name',
       
    valueDate     char(8)     Path '@valuedate',
       
    Currency      Char(3)     Path '@currency',
       
    ask           Dec(104)  Path '@ask',
       
    bid           Dec(104)  Path '@bid'  
      
    )
    AS 
    WebServiceResult 


    Das RPG sieht so aus
    PHP-Code:
    // -----------------------------------------------------------------------------------------
    // SQL Definitionen                                                                         
    // -----------------------------------------------------------------------------------------
    dcl-proc SqlDef;                                                                            
                                                                                                
      
    sql_txt='                                                                              -  
       SELECT *                                                                              -  
         FROM                                                                                -  
    XMLTABLE(''$doc/Envelope/Cube/Cube/Cube'' PASSING XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB -  
       (''https://www.db-markets.com/dbm/portal/FxSettlementRates/31-03-2017'','''')         -  
              )                                                                              -  
       AS "doc"                                                                              -  
         COLUMNS                                                                             -  
           Subject       VarChar(30) CCSID 1208 Path ''../../../Subject'',                   -  
           Sender        VarChar(30) CCSID 1208 Path ''../../../Sender/Name'',               -  
           valueDate     char(8)     Path ''@valuedate'',                                    -  
           Currency      Char(3)     Path ''@currency'',                                     -  
           ask           Dec(10, 4)  Path ''@ask'',                                          -  
           bid           Dec(10, 4)  Path ''@bid''                                           -  
         )                                                                                   -  
        AS WebServiceResult                                                                  -  
                       '
    ;                                                                       
    exec sql prepare sql_stmt from :sql_txt;      // SQL Text in Sql Statment                   
    exec sql declare c1 cursor for sql_Stmt;      // Cursor C1 mit Sql Statement verknüpfen     
    exec sql open c1;                             // Ausführem SQL Statement                    
                                                                                                
    end-Proc;                                                                                   
    // -----------------------------------------------------------------------------------------
    // Lesen Cursor C1                                                                          
    // -----------------------------------------------------------------------------------------
    dcl-proc ReadCursorC1;                                                                      
                                                                                                
      
    dow sqlstt <>'02000';                                                                     
        
    exec Sql fetch c1 into:DDS1;                                                            
         if 
    sqlstt ='02000';                                                                    
           return;                                                                              
         endIf ;                                                                                
       
    // Do something                                                                          
      
    enddo;                                                                                    
                                                                                                
    end-proc;                                                                                   
    // -----------------------------------------------------------------------------------------
    // Sql Definitionen                                                                         
    // -----------------------------------------------------------------------------------------
    dcl-proc CloseCursor;                                                                       
                                                                                                
       
    exec sql close C1;                                                                       
                                                                                                
    end-Proc

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die Fehlermeldung besagt, dass zur Laufzeit eine CCSID nicht passt.
    Prüfe die CCSID des Jobs zur Laufzeit.
    Häufig ist die Ursache eine CCSID *HEX (65535).

    Wie ist die Zielstruktur definiert?
    Verwende hier ggf. UCS2-Felder.
    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
    Mar 2011
    Beiträge
    94
    Die Zielstruktur sieht so aus

    dcl-ds DDS1;
    ySubject varchar(30);
    ySender varchar(30);
    yValueDate char(8);
    yCurrency char(3);
    yAsk zoned(10:4);
    yBid zoned(10:4);
    end-Ds;


    die CCSID lautet 65535

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wie gesagt. Wie soll denn zur Laufzeit eine decodierung von 1208 in 65535 funktionieren?
    Mache einen CHGJOB CCSID(1141/273) oder definiere die Variablen als nvarchar (die Syntax weiß ich jetzt nicht) für Unicode/UCS2.
    Per %char() kannst du die dann später immer noch umwandeln, wobei du hier Umlautprobleme bei 65535-JobCCSID bekommst.
    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. V7R1 Fehler Umwandlung SQLRPGLE
    By Peet in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 29-10-14, 07:54
  2. Antworten: 3
    Letzter Beitrag: 24-04-03, 16:54
  3. Fehler beim GET im FTP
    By malzusrex in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 23-04-03, 17:15
  4. IPL und Fehler beim NetServer-Start
    By lemmi in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 10-07-02, 12:07
  5. Fehler beim Beenden, cwblemsrv.exe
    By Tobias in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 30-01-02, 11:43

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •