14. März 2007

Assertions

Assertions im Sourcecode sind Alltag in Java und anderen Programmiersprachen. Warum also nicht auch bei uns in PL/SQL?

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