-
Ob ich nun
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET END_TABLE = 1;
oder
if SQLCODE <> 0
SET END_TABLE = 1;
kodiere, ist doch jetzt nicht der große Unterschied.
-
 Zitat von Fuerchau
Ob ich nun
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET END_TABLE = 1;
oder
if SQLCODE <> 0
SET END_TABLE = 1;
kodiere, ist doch jetzt nicht der große Unterschied.
Dann habe ich deinen Code doch noch nicht verstanden. Ich mache mal ein kleines Besipiel:
In meiner Funktion will mehrere selects abschicken und jeweils wissen, ob es geklappt hat. Muss ich dann mehrmal den Continue Handler deklarieren?
Also z.B.
Code:
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET END_TABLE = 1;
select ku_name from kunden into name;
if end_table = 1 then
erzeugeError(....)
else
macheWasGueltiges(name);
end if;
select pr_preis from artikel into preis;
if end_table = 1 then
erzeugeError(....)
else
macheWasGueltiges(preis);
end if;
Meinst du das?
Oder muss ich vor jedem select den declare und den set machen?
-
Ich denke schon. Nur die Variable end_table musst du ja vorher auf 0 setzen;-).
Probiers doch einfach aus. Du kannst ja SQL-Prozeduren/Funktionen auch debuggen.
Dies funktioniert allerdings nur über einen 2. Job mit STRSRVJOB Jobname; STRDBG ServiceProgramm;
-
Viele Dank. ich probiere das mal.
-
SQLCODE und SQLSTATE sind auch in SQL Funktionen und Prozeduren verfügbar.
Du musst sie einfach nur declarieren, dann werden sie automatisch befüllt.
Im SQLRPGLE werden sie automatisch vom Pre-Compiler deklariert.
-
Danke für die Info. Aber ich muss sie zum Abfragen hinter jeder SQL Anweisung, die ich prüfen will, immer mit
-- Status der SQL-Anweisung abrufen
GET DIAGNOSTICS SQLCODE = RETURNED_SQLCODE, SQLSTATE = RETURNED_SQLSTATE;
füllen, oder?
(Das Code Beispiel stammt von Chat GPT)
-
 Zitat von dschroeder
Dann habe ich deinen Code doch noch nicht verstanden. Ich mache mal ein kleines Besipiel:
In meiner Funktion will mehrere selects abschicken und jeweils wissen, ob es geklappt hat. Muss ich dann mehrmal den Continue Handler deklarieren?
Also z.B.
Code:
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET END_TABLE = 1;
select ku_name from kunden into name;
if end_table = 1 then
erzeugeError(....)
else
macheWasGueltiges(name);
end if;
select pr_preis from artikel into preis;
if end_table = 1 then
erzeugeError(....)
else
macheWasGueltiges(preis);
end if;
Meinst du das?
Oder muss ich vor jedem select den declare und den set machen?
... was hast Du denn wirklich vor? Für mich sieht das (oberflächlich betrachtet) nach einem join aus. Was passiert denn, wenn Du gefunden hast und was, wenn nicht - für mich sieht das (oberflächlich betrachtet) nach einem Zugriffsmodul aus.
D*B
PS: der KI für eine Ausrede bei ND hält.
-
Das sind nur vereinfachte Beispiele. Ich schreibe eine SQL-Funktion für einen Webservice. Die Funktion liefert für bestimmte Anfragen Blobs zurück bzw. schreibts übergebene Blobs in eine Datenbank. Es sind nur bestimmte Anfragen zulässig. Deshalb gibt es mehrere if's. Das habe ich aber inzwischen durch case when ersetzt.
Mein eigentliches Problem ist wirklich nur:
Wie kann ich den SQLCOD nach einer ausgeführten SQL-Anweisung (das kann eine select oder eine update Anweisung sein) bekommen? Ich möchte erkennen, ob die Anweisung problemlos ausgeführt wurde, ob sie keinen Satz gefunden hat oder ob ein anderer Fehler (z.B. wegen Lock) aufgetreten ist.
Da ich das an mehreren Stellen im Code brauche, suche ich eine "kurze" Lösung.
-
Deklariere den SQLCODE als Variable und sie wird, wie von mir schon beschrieben, automatisch von SQL befüllt.
-
 Zitat von Andreas_Prouza
Deklariere den SQLCODE als Variable und sie wird, wie von mir schon beschrieben, automatisch von SQL befüllt.
Vielen Dank, Andreas.
ich probiere es jetzt nochmal mit deiner Methode. Vielleicht habe ich eben etwas falsch gemacht.
-
DECLARE SQLSTATE char(5);
DECLARE SQLcode int;
-
Den Declare hatte ich nur bei DB2 allgemein und nicht bei DB2 for i gefunden.
Similar Threads
-
By harkne in forum NEWSboard Programmierung
Antworten: 16
Letzter Beitrag: 29-03-22, 17:25
-
By ILEMax in forum IBM i Hauptforum
Antworten: 16
Letzter Beitrag: 15-11-16, 07:56
-
By JonnyRico in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 20-04-05, 16:29
-
By MAA in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 29-08-04, 12:45
-
By Cheesy in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 14-07-04, 09:28
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