[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2012
    Beiträge
    5

    Select sum() into :VAR SQLCODE 811

    Hallo Zusammen,

    ich habe in einen RPG-Programm eine embedded SQL-Anweisung geschrieben mit Select sum ( a+ b ) into :VAR1 where .....

    als SQL-Code erhalte ich die -811

    starte ich die Abfrage im Navigator erhalte ich ohne Probleme die Summe als Ergebnis

    Wer hat eine Antwort auf dieses Problem?

    Vielen Dank

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo,

    da scheint im SQL etwas mit der where Bedingung nicht zu stimmen.
    PHP-Code:
    Nachrichten-ID . . . . . . . :   SQL0811                                      
    Nachrichtendatei 
    . . . . . . :   QSQLMSG                                      
      Bibliothek 
    . . . . . . . . :     QSYS                                       
                                                                                  
    Nachricht 
    . . . :   Ergebnis der Anweisung enthält mehr als eine Zeile.       
    Ursache  . . . . :  Die Ergebnistabelle einer Anweisung SELECT INTOeiner    
      Unterabfrage oder einer Unterauswahl einer Anweisung SET enthält mehr als   
      eine Zeile
    Es handelt sich um Fehlerart &1. Bei Fehlerart 1 wurde von einer
      Anweisung SELECT INTO versucht
    mehr als eine Zeile zurückzugebenBei      
      Fehlerart 2 wurde durch eine Unterauswahl eines Basisprädikats mehr als eine
      Zeile erstellt
    Es ist nur eine Zeile zulässig.                             
    Fehlerbeseitigung:  Die Auswahl so änderndass nur eine Ergebniszeile        
      zurückgegeben wird
    und die Anforderung wiederholenZur Verarbeitung       
      mehrerer Ergebniszeilen müssen 
    die Anweisungen DECLARE CURSOROPEN und     
      FETCH verwendet werden
    Für eine Unterabfrage können die Prädikate IN,      
      
    EXISTSANY und ALL verwendet werdenum mehrere Ergebniszeilen zu          
      verarbeiten
    Wenn eine einzige Zeile erwartet wirdkönnen Datenfehlerwie
    z
    Bdoppelte Zeilenauftreten, die die Rückgabe mehrerer Zeilen bewirken
    Guß
    Michael

  3. #3
    Registriert seit
    Jul 2012
    Beiträge
    5
    Hallo Michael,

    an die Where Bedingung kann es eigentlich nicht liegen. Wenn ich das SQL-Statement im Dialog ohne into Aufrufe erhalte ich das korrekte Ergebnis angezeigt. Oder verhält sich Select sum() into :var1 where ... anders.

    Gruss

    RoRa

  4. #4
    Registriert seit
    Dec 2011
    Beiträge
    11
    Bei der SUM-Funktion ist es möglich, dass das Ergebnis ein NULL-Wert ist, deshalb muss entweder in der Abfrage sichergestellt werden, dass kein NULL zurückgegeben wird (bspw. NULL duch den Wert 0 ersetzen)
    Code:
    SELECT coalesce(sum(...), 0) INTO :var1 FROM ...
    oder es muss eine Indikatorvariable angelegt werden (5I 0) und folgendermaßen angegeben werden:
    Code:
    SELECT sum(...) INTO :var1 :indicator1 FROM ...
    in indicator1 steht dann der Wert 1 wenn bei der SUM-Funktion NULL zurückgegeben wurde, sonst 0

    Gruss
    Klaus

  5. #5
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hallo,

    wenn der SQLCode 811 angezeigt wird,
    dann ist mehr als eine Ergebniszeile im Spiel.

    Auf jeden Fall nochmal prüfen.
    ( Bibliotheksliste ? )
    Gruß
    Michael

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Ohne das SQL Select ... into - Statement wirklich zu sehen, können wir uns hier nur etwas zusammenraten.

    Wie Michael schon sagte SQLCODE -811 besagt, dass mehr als 1 Datensatz ausgegeben wurde.

    Mehrere Datensätze werden bei der Verwendung von Aggregat-Funktionen nur dann ausgegeben, wenn in dem SQL Statement eine Group By-Anweisung angegeben wurde.

    Das folgende Beispiel bringt nur einen Datensatz zurück:

    Code:
    Select Sum(Wert) 
    From Umsatz 
    Where KundeNr = '4711';
    Ebenso das nächste SQL Statement:
    Code:
    Select Sum(Wert)
    From Umsatz
    Where KundeNr = '4711'
    Group By KundeNr;
    Das nächste Statement bringt mehrere Datensätze (einen für jeden Kunden der ArtikelNr '12345' geordert hatte) zurück:
    Code:
    Select Sum(Wert)
    From Umsatz
    Where ArtikelNr = '12345'
    Group By KundeNr;
    Sofern es nicht die Group By-Anweisung ist, ist alles weitere ohne das SQL-Statement zu kennen nur Spekulation.

    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

Similar Threads

  1. SQLcode -811, SQLstate 21000
    By deni87991 in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 26-10-06, 10:35
  2. CREATE FUNCTION mit select im Bauch ?
    By cheffe1008 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 21-09-06, 16:05
  3. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47
  4. SQL Select mit SUM aus einer DB
    By JonnyRico in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 30-03-06, 12:33
  5. SQL Select into
    By alexander may in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-03-05, 14:56

Berechtigungen

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