Ganymed Geschrieben 26. Oktober 2004 Teilen Geschrieben 26. Oktober 2004 Hallo zusammen, ich habe hier folgendes Problem: Ich habe mir einen EXCEPTION zusammengestickt und bekomme nun eine für mich seltsame Code-Ausführung (Code hier vereinfacht): OPEN Cursor(Variable); LOOP FETCH Cursor INTO Number1, Number2; EXIT WHEN Cursor%NOTFOUND; BEGIN SELECT ID INTO numID FROM Tabelle WHERE a=Variable; Prozedur_Verabeite_was(Variable,numID,1); -------------------------------------------------- EXCEPTION -- || Wenn kein Datensatz gefunden wurde WHEN NO_DATA_FOUND THEN IF (TriggerFlag = 0) THEN SAVEPOINT trans1; END IF; Dp_GetNextNoForAttributeID (350240252, NextInt4No, 0, TriggerFlag); IF (NextInt4No <= 0) THEN IF(TriggerFlag = 0) THEN ROLLBACK TO trans1; END IF; wfms_Raiserror (30009, 0, 0, meine_Tabelle'); ELSE SELECT Name INTO varName FROM Tabelle_Namen WHERE ID = Variable; INSERT INTO meine_Tabelle(ID) VALUES (ID); END IF; WHEN TOO_MANY_ROWS THEN Prozedur_Verabeite_was(Variable,numID,0); END; END LOOP; CLOSE Cursor; So, nun habe ich folgendes Problem: Er findet bei meinem obersten SQL-Statement genau einen Datensatz und kommt dadurch weder durch NO_DATA_FOUND noch mit TOO_MANY_ROWS in meine Ausnahmehandlung. Was er nun macht ist, dass er meine Prozedur Prozedur_Verabeite_was(Variable,numID); ausführt. Soweit in Ordnung. Aber nun kommt das komische. Nachdem er die Prozedur ausgeführt hat, springt er in den Ausnahmeabschnitt in die Zeile: IF (TriggerFlag = 0) THEN.... und macht ein Insert, obwohl er nicht sollte. Frage: Kann PL/SQL immer nur genau ein Statement in einer Ausnahme bearbeiten? In meinen Büchern und in weiteren Online Dokus find ich nämlich dann immer nur noch ein Statement. Also etwas sowas: WHEN NO_DATA_FOUND THEN dbms_output.put_line('Nix gefunden'); WHEN TOO_MANY_ROWS THEN dbms_output.put_line('Zuviel gefunden'); END; Gruß Ganymed Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
AxlHammer Geschrieben 26. Oktober 2004 Teilen Geschrieben 26. Oktober 2004 Hi, in einer Exception können immer mehrere Statements abgearbeitet werden. Wenn er in deine "no_data_found" Exception springt, heisst das, dass deine Prozedur_verarbeite_was(..) diese Exception auslöst, bzw. das diese Exception nicht innerhalb der Prozedur verarbeitet wird... In der Hoffnung, geholfen zu haben, Axl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 26. Oktober 2004 Teilen Geschrieben 26. Oktober 2004 Ein Exception Handler besteht aus einer Reihe von Statements, die ausgeführt werden, wenn ein bestimmter Fehler auftritt. Welche und wieviele Statements ausgeführt werden sollen, ist dem Programmierer überlassen. Wenn in diesen Statements Variablen angesprochen werden, muß ihr Gültigkeitsbereich berücksichtiigt werden. Ebenso wird vom Programmierer festgelegt, für welche Fehler eine Fehlerbehandlung stattfinden soll. Sobald für einen bestimmten Fehler ein Exception Handler definiert ist, wird dieser beim Auftreten des Fehlers automatisch angesprungen und die dortigen Statements werden ausgeführt. Wenn in einem Block ein bestimmter Fehler auftritt, für den in diesem Block kein zugehöriger Exception Handler definiert ist, wird der darüberliegenede Block nach dem zugehörigen Exception Handler durchsucht. Dies wird solange wiederholt, bis entweder in einem darüberliegenden Block ein passender Exception Handler gefunden und ausgeführt wurde, oder anderenfalls, wenn kein passender Exception Handler vorhanden ist, eine explizite Fehlermeldung - UNHANDLED EXCEPTION ...... - ausgegeben und das Pl/SQL Programm abgebrochen wird. Hoffe das hat dir ein wenig geholfen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 26. Oktober 2004 Autor Teilen Geschrieben 26. Oktober 2004 Super! Es war tatsächlich meine Unterprozedur die nen Fehler hatte, und deswegen ist er in die Exception gesprungen. Ist ja interssant, dass der Exeption-Block so wirkt. Vielen Dank, jetzt kann ich meinen Fehler da suchen (oder eher ) Gruß Gany Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.