[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2008
    Beiträge
    6

    SQL-Fehler free-rpg

    Hallo zusammen,
    folgende Fehlermeldung habe ich:
    Nachricht . . . : Anzeigervariable erforderlich.
    Ursache . . . . : Eine Anweisung FETCH, eine eingebettete Anweisung SELECT,
    eine Anweisung CALL, GET DESCRIPTOR, SET oder VALUES INTO hatte einen
    Nullwert zur Folge, für Host-Variable AMOUNT wurde jedoch keine
    Anzeigervariable angegeben. Die relative Position der Host-Variablen in der
    Klausel INTO oder der Parameterliste ist 2. Ist der Name der Host-Variablen
    *N, wurde ein Deskriptorbereich angegeben.
    Tritt dieser Fehler bei einer Anweisung GET DESCRIPTOR auf, wird der
    Nullwert zurückgegeben, aber das Element INDICATOR wurde bei der Anweisung
    GET DESCRIPTOR nicht angegeben.
    Fehlerbeseitigung: Eine Anzeigervariable angeben und das Programm erneut
    vorkompilieren.

    Im Programm habe ich folgendes codiert :

    /free
    exec sql select sum(Wert1 - Wert2) into :AMOUNT
    from DateiX

    sum(Wert1 - Wert2) kann = 0 sein
    D AMOUNT s 14 2

    Hat jemand eine Lösung zu diesen Problem?

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.877
    So wie es aussieht kann Dein SQL-Statement einen NULL-Wert (hat nichts zu tun mit dem deutschen Wort Null = 0) zurückbringen. (NULL-Wert = Nix, Kein Ergebnis)

    Um auf NULL-Wert prüfen zu können, wird eine Indikator/Anzeiger-Variable erwartet.

    Eine Indikator-Variable wird in RPG mit 5I 0 definiert und im SQL-Statement unmittelbar (nur durch ein Blank getrennt) nach der Variablen angegeben, die geprüft werden soll. Wurde für die Variable ein NULL-Wert ausgegeben, so geht die Indikator-Variable auf -1 anderenfalls wird 0 zurückgegeben. Bei einem NULL-Wert wird die Host-Variable nicht initialisiert. Also am besten vor dem SQL-Statement clearen oder die Indikator-Variable abfragen und dann clearen.

    Code:
    D MyInd             S                           5I 0
    
     /Free
        Clear Amount;
        Exec SQL   Select sum(Wert1 - Wert2) into :AMOUNT :MyInd
                       from DateiX;
        If MyInd < *Zeros;
           Clear Amount;
        Endif; 
     /End-Free
    Birgitta
    Birgitta Hauser

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

  3. #3
    Registriert seit
    Apr 2008
    Beiträge
    6
    Vielen Dank!
    Hat nun funktioniert!!!

  4. #4
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,

    mit der Funktion COALESCE kannst du NULL in einen Defaultwert umwandeln:

    Code:
    exec sql select COALESCE(sum(Wert1 - Wert2), 0) into :AMOUNT
    from DateiX
    ab 6.1 geht auch:
    Code:
    exec sql select IFNULL(sum(Wert1 - Wert2), 0) into :AMOUNT
    from DateiX

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.249
    Wobei der Anzeiger insoweit hilfreich ist festzustellen, dass keine Daten für die Summe vorhanden sind.
    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

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... alles Murks!
    es muss heißen:
    select sum(coalesce (Wert1, 0) - coalesce (Wert2, 0))
    from ...

    alles andere liefert nicht erwartete Ergebnisse.

    "null" versteht man am Besten, wenn man es mit "unbestimmt" übersetzt.

    null - irgendwas = null !!!
    sum(irgendwas) = null, falls mindestens ein Wert null ist

    D*B


    Zitat Zitat von Fuerchau Beitrag anzeigen
    Wobei der Anzeiger insoweit hilfreich ist festzustellen, dass keine Daten für die Summe vorhanden sind.
    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. Frei Porn Site!
    By Fucasdreh in forum NEWSboard Server Job
    Antworten: 0
    Letzter Beitrag: 10-01-07, 13:12
  2. SQL UDF Function ausführung mit Fehler
    By jakarto in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 24-07-06, 13:41
  3. Fehler im SQL bzw. Joblog
    By GraueEminenz in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 10-07-06, 11:58
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43

Berechtigungen

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