[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    Sqlfehler 304 SQLSTT = '01515'

    Hallo *all,

    ich zerbreche mir den Kopf, warum eigentlich SQL Statement:

    Code:
    exec sql                                                
      SELECT SUM(ZTEV + ZTAV)                               
      INTO :SOLLZ :MyIndikator                            
      FROM (                                                
      SELECT SUM(DISTINCT                                   
      CASE WHEN ZTAV = 0 THEN ZTEV ELSE 0 END) AS ZTEV, 
      SUM(DISTINCT                                          
      CASE WHEN ZTAV <> 0 THEN ZTAV ELSE 0 END) AS ZTAV 
      FROM WORKF                                         
      WHERE PENR = :PENR AND AUF# = :AUF#           
      GROUP BY ABT, KST, LAG, AUF#)              
      AS X;
    den Fehler:
    Code:
    Sqlcod 304 SQLSTT = '01515'  
    Explanation: Conversion error in assignment to host variable &2
    liefert.

    Wenn ich das Sql direkt absetze bekomme ich folgende Werte:
    Code:
        EVZT     ZTAV 
      29.720        0

    Die 2 Variablen sind mit 6, 0 definiert, daher ist mir der Error nicht verständlich da das Ergebnis
    5, 0 ist.

    In der Programmstruktur hätte ich MyIndikator wie immer wie folgt definiert:
    Code:
    d MyIndikator                    5I 0

    Was hats den da?

    Dank im Voraus

    Tarki

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Das Problem liegt wohl darin, dass Du die Summen nicht explizit auf einen bestimmten Datentyp und länge gecastest hast. Damit kann es vorkommen, dass die automatisch ermittelte Länge größer ist, als das ErgebnisFeld.

    Versuchs so:
    Code:
    SELECT Cast(SUM(ZTEV + ZTAV) as Dec(6, 0))                               
      INTO :SOLLZ :MyIndikator   
    ...
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Apr 2012
    Beiträge
    360
    Morgen Birgitta,

    habe es vorher schon versucht die summen im inneren Select mit Decimal 6, 0 anzugeben, aber leider ohne erwünschten Erfolg.

    Leider hat das mit dem Cast auch nicht funktioniert.

    Der MyIndikator ist bei dem Fehler auf -2.
    Kann ich da irgendetwas rauslesen?

    Danke

    Tarki

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Mach mal einen "create table test as (select ...)" um den Typ des Zielfeldes festzustellen.
    Wer weiß schon wie SQL genau Ergebnisfelder definiert um den maximal möglichen Ergebniswert aufzunehmen selbst wenn das tatsächliche Ergebnis durchaus kleiner sein kann.

    -2 bedeutet nur "Wert zu groß für Zielfeld".
    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

  5. #5
    Registriert seit
    Apr 2012
    Beiträge
    360
    Die Ergebnisfelder sind 31 Decimal.

    Ich hätte es so versucht, aber bekomme immer noch den Fehler.
    Wie definiere ich ZTEV, ZTAV?

    Code:
    SELECT Cast(SUM(ZTEV + ZTAV) as Dec(6, 0))                               
      INTO :SOLLZ :MyIndikator
    ...
    Decimal( SUM(DISTINCT                                   
      CASE WHEN ZTAV = 0 THEN ZTEV ELSE 0 END), 6, 0) AS ZTEV,
    
    ...
    Danke vielmals

    Tarki

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Und warum definierst Du dann Deine Ausgabe-Felder nicht 31P 0?
    Anstatt mit Gewalt in SQL auf 6, 0 konvertieren.

    Indikator -2 deutet allerdings auch darauf hin, dass mindesten eines der Felder ungültige numerische Wert beinhaltet (irgend einen krummen Hex-Wert).

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Zitat Zitat von tarkusch Beitrag anzeigen
    Die Ergebnisfelder sind 31 Decimal.

    Ich hätte es so versucht, aber bekomme immer noch den Fehler.
    Wie definiere ich ZTEV, ZTAV?

    Code:
    SELECT Cast(SUM(ZTEV + ZTAV) as Dec(6, 0))                               
      INTO :SOLLZ :MyIndikator
    ...
    Decimal( SUM(DISTINCT                                   
      CASE WHEN ZTAV = 0 THEN ZTEV ELSE 0 END), 6, 0) AS ZTEV,
    
    ...
    Danke vielmals

    Tarki
    was haben denn ZTEV und ZTAV in der Tabelle für eine Datenart?

    Ein spezifische Eigenart von interaktivem SQL ist das Übergehen von Daten Umsetzungsfehlern (die ominösen Pluszeichen in der Anzeige). Das kann zu Deinem Resultat beitragen, wenn in Daten, die in der Where Klausel wegfallen, aber bei der Berechnung der Ergebnismenge ausgwertet werden, nicht umsetzbare Daten sind.

    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. embedded SQL in ILE RPG, UPDATE
    By Zupfl50 in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 06-10-04, 21:04

Berechtigungen

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