Das ist eine gute Frage und ich löste sie für meine Fragestellungen mit dieser Technik:
DECLARE e_Assertion EXCEPTION; BEGIN IF condition1 = 'value' OR boolean = TRUE OR something_else THEN RAISE e_Assertion; END IF; -- weiterer Code: ... EXCEPTION WHEN e_Assertion THEN NULL; WHEN OTHERS THEN -- when-others-exception-handling END;
In diesem Beispiel schreibt man alle negativen Assertions untereinander und startet entsprechende Exceptions, die im Exception-Handling nichts tun.
z.B.
PROCEDURE Double_Manager_Salary (P_EMPNO IN NUMBER, P_JOB IN VARCHAR2) IS e_Assertion EXCEPTION; BEGIN IF P_Job != 'MGR' THEN RAISE e_Assertion; END IF; UPDATE EMP SET SAL = SAL * 2 WHERE EMPNO = P_EMPNO; EXCEPTION WHEN e_Assertion THEN NULL; END;
was wir hier sehen ist sehr einfach: Wenn man annimmt, dass nur Manager das doppelte Gehalt bekommen, dann kann man die Prozedur direkt nach dem Start abbrechen. Man springt in die e_Assertion-Exception und tut nichts.
Try it
Gerd