Zum Inhalt springen

Exception Handling PL/SQL (Achtung, lang) :-)


Ganymed

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...