-
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
-
Hallo,
hast Du es schon mal so versucht:
PHP-Code:
Select Field, Count(*)
From MyTable
Group By Field
Birgitta
-
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?
-
Wenn nach dem Fetch der SQLCODE <> 0 ist, darfst du den Inhalt halt nicht mehr ausgeben, die letzten Feldinhalte bleiben dann nämlich erhalten.
-
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
-
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!
-
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.
Similar Threads
-
By behmer in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 29-05-06, 12:52
-
By steven_r in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 17-05-06, 15:49
-
By cbe in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 08-06-05, 16:21
-
By juergenkemeter in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 17-11-04, 14:32
-
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
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks