[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2007
    Beiträge
    75

    SQLDA - dynamisches SQL SUM Funktion

    Hallo,

    ich arbeite in einem Programm mit der SQLDA - Struktur um dynamisch SQL´s auszuführen.

    Das funktioniert auch sehr gut, außer wenn ich eine SUM - Funktion im SQL verwende:

    z.B. SELECT SUM(WERT) FROM TABELLE

    Dann bekomme ich immer im SQLCOD den Fehlercode -822 zurück, ich weiß aber nicht so recht warum.


    Die Programmvariablen weiße ich folgendermaßen zu:

    Beim FETCH (exec sql FETCH NEXT FROM C1 USING DESCRIPTOR :SQLDA) kommt es dann immer zum -822 Fehler.

    Die SUM-Felder sind vom SQLTYP 485.

    ein COUNT(*) funktioniert z.B., nur der SUM mag nicht

    Irgendwer eine Idee?



    Code:
       
    
         D alpha           s           4096A   inz dim(999)
         D timestamp       s               Z   inz dim(999)
         D packedDec       S             31p 9 inz dim(999)
         D zonedDec        s             31s 9 inz dim(999)
         D integer         s              8B 0 inz dim(999) 
    
    
    
    
         for index = 1 to SQLD;
              SQLVAR = SQL_VAR(index);
    
             select;
              when SQLTYPE = 484 or SQLTYPE = 485; //Packed
                SQLDATA = %addr(packedDec(index));
                #MSQLL(index) = SQLLEN;
                SQLLEN = (256*%len(packedDec(index))) + %decpos(packedDec(index));
              when SQLTYPE = 488 or SQLTYPE = 489; //Zoned
                SQLDATA = %addr(zonedDec(index));
                #MSQLL(index) = SQLLEN;
                SQLLEN = (256*%len(zonedDec(index))) + %decpos(zonedDec(index));
              when SQLTYPE = 392 or SQLTYPE = 393; //Timestamp
                SQLDATA = %addr(timestamp(index));
                #MSQLL(index) = SQLLEN;
                SQLLEN = %len(timestamp(index));
              when SQLTYPE = 496; //Integer
                SQLDATA = %addr(integer(index));
                #MSQLL(index) = SQLLEN;
              other;
                SQLDATA = %addr(alpha(index));
                #MSQLL(index) = SQLLEN;
                SQLLEN = %len(alpha(index));
             endsl;
    
              #FLDS($CF) = %trimr(SQLNAME);
              $CF = $CF+1;
    
              SQL_VAR(index) = SQLVAR;
            ENDFOR;

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Probiere mal die SUM mit einem CAST zu überziehen:
    Code:
    SELECT CAST(SUM(WERT) as DEC(31, 9)FROM TABELLE
    lg Andreas

  3. #3
    Registriert seit
    Jan 2007
    Beiträge
    75
    auch schon probiert, leider ohne erfolg

    bin aber denke ich kurz vor der Lösung
    Man muss denke ich noch bei diesem SQLTYP noch die SQLIND (Null-Indikator) Variable zuweisen.


    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Probiere mal die SUM mit einem CAST zu überziehen:
    Code:
    SELECT CAST(SUM(WERT) as DEC(31, 9)FROM TABELLE
    lg Andreas

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... bei ungeradem SQLTYPE brauchst Du zusätzlich einen Null-Indicator.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Dynamisches embedded SQL
    By Tschabo in forum NEWSboard Programmierung
    Antworten: 10
    Letzter Beitrag: 11-03-21, 09:14
  2. Dynamisches SQL bauen in RPG
    By labm in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 07-05-15, 07:55
  3. Artikel: SQL: dynamisches Select ohne Cursor
    By NEWSolutions Redaktion in forum NEWSolutions artikel
    Antworten: 0
    Letzter Beitrag: 05-12-13, 18:03
  4. TCP/IP-Leitwege - Dynamisches Eintragen verhindern?
    By mott in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 18-09-02, 15:42
  5. SQL Funktion " Like"
    By Stefan_R in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 23-01-02, 16:08

Berechtigungen

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