[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Jun 2006
    Beiträge
    3

    Einfache Abfrage in COBOL/400 mit EXEC SQL

    Hallo,
    ich habe bisher keinerlei Erfahrungen in embedded SQL sammeln können, die IBM "Hand-" Bücher sind auch nicht wirklich hilfreich. Ich bräuchte die Kombination eines
    SELECT DISTINCT feld1 FROM db

    und die gleichzeitige Ausgabe der Anzahl Vorkommen dieses Feldes (SELECT COUNT(*)).

    Auf unserer Entwicklungsmaschine ist SQL installiert, aber auf unserem Produktivsystem leider nicht und mit einem QRY kriege ich ja kein DISTINCT hin, bleibt also nur ein COBOL400-Programm, in dem ich aber gerne die Annehmlichkeiten der SQL nutzen würde

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.928
    Hallo,

    hast Du es schon mal so versucht:

    PHP-Code:
    Select FieldCount(*)
    From MyTable
    Group By Field 
    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
    Jun 2006
    Beiträge
    3

    Thumbs up Danke

    Prima, das funktioniert super! Also ist der DISTINCT gar nicht nötig, sollte ich vielleicht mal meine SQL-Kenntnisse auffrischen / erweitern.

    Falls es noch mehr Anfänger wie mich gibt, so habe ich es gelöst:

    Code:
    ...
         EXEC SQL
           DECLARE C1 CURSOR FOR
             SELECT SUAUSBKZ, COUNT(*)
               FROM SUSTAM
               GROUP BY SUAUSBKZ
         END-EXEC.
    *
         EXEC SQL
           OPEN    C1
         END-EXEC.
    *
         PERFORM FETCH-ROW UNTIL SQLCODE NOT = 0.
    *
         EXEC SQL
           CLOSE C1
         END-EXEC.
    ...
         EXEC SQL
           FETCH C1 INTO :AUSBKZ, :ANZAHL
         END-EXEC.
    Ein kosmetisches Problem bleibt aber noch: Die letzte Zeile wird 2 x ausgegeben?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Wenn nach dem Fetch der SQLCODE <> 0 ist, darfst du den Inhalt halt nicht mehr ausgeben, die letzten Feldinhalte bleiben dann nämlich erhalten.
    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
    Aug 2001
    Beiträge
    2.928
    Für Anfänger und Fortgeschrittene:

    Nicht auf SQLCODE = 0 abfragen!:
    Es gibt Situationen, in denen ein positiver SQLCODE (zwischen 1 und 99) ausgegeben wird. Dies ist nur eine Warnung, der Datensatz wird dennoch zurückgebracht und kann verarbeitet werden.
    (Diese Erweiterung ist in Release V5R1 erfolgt und bei unseren Abfragen z.T. für falsche Ergebnisse gesorgt!)

    Deshalb sollte man explizit auf SQLCODE 100 (oder SQLSTATE '02000') für Last Record oder Nicht gefunden abfragen.
    Ausserdem sollte man Fehlersituationen (Negativer SQLCODE oder SQLSTATE bei dem die ersten beiden Stellen weder '00', noch '01', noch '02' sind), prüfen und evt. entsprechend darauf reagieren.

    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

  6. #6
    Registriert seit
    Jun 2006
    Beiträge
    3
    Aha, da habe ich heute eine Menge gelernt. Mein Wissen bezüglich embedded SQL tendiert wie schon o.a. gegen Null.

    Dann sind die über SQLCA implizit eingebundenen Felder SQLCODE und SQLSTATE so etwas wie der FILE-STATUS im COBOL. Werde mal bei den IBM-Redbooks nachschauen, ob es da eine Aufschlüsselung gibt.

    In obigem Code stehen beide Felder immer auf 0, außer nach dem DECLARE (SQLCODE = 1077952576) und wie schon von Fuerchau vorausgesagt nach dem letzten FETCH (SQLCODE = 0000000100, SQLSTATE = '02000').

    Nochmals vielen Dank euch Beiden, ihr habt mir sehr geholfen!

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Der Declare führt kein SQL aus, daher ist die Variable SQLCODE und SQLSTATE nicht initialisiert, was da drin steht ist zu diesem Zeitpunkt Schrott.
    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. Abfrage nach <> Ziffern in SQL
    By behmer in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 29-05-06, 12:52
  2. sql abfrage
    By steven_r in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 17-05-06, 15:49
  3. Problem bei Abfrage bei Imbedded SQL
    By cbe in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 08-06-05, 16:21
  4. sql abfrage mit substring
    By juergenkemeter in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 17-11-04, 14:32
  5. MS Access SQL Abfrage über ODBC
    By Helwo in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 19-03-02, 09:01

Berechtigungen

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