Ich habe einen Trigger implementiert, der die Löschung eines Kontos
verhindert, wenn eine Zahlung erfolgt, aber ich erhalte den Fehler, dass
die Tabelle geändert wurde. Im Internet steht, dass es das Problem der
mutating table ist.
Ich habe es gerade mit dem Compound Trigger versucht, aber ich konnte es
nicht zum Laufen bringen.
Der code ansich implemntiert aber beim testen kommt dann das Problem mit
mutating Table.
Es wäre hilfreich wenn mir jemand mal anhand des Beispiels zeigen könnte
wie es mit dem Compound Trigger funktioniert, oder gibt es noch eine
andere Lösung dazu ?
Hier der Code
1 | CREATE OR REPLACE TRIGGER checkDelete
|
2 |
|
3 | BEFORE DELETE ON customerAcc
|
4 |
|
5 | Declare
|
6 |
|
7 | price NUMBER;
|
8 |
|
9 | status NUMBER;
|
10 |
|
11 | delete_exception EXCEPTION;
|
12 |
|
13 | BEGIN
|
14 |
|
15 | SELECT amount, paid INTO price, status FROM payment NATURAL JOIN tutoring
|
16 |
|
17 | WHERE customer_ID = :OLD.customer_ID;
|
18 |
|
19 | IF price != status THEN
|
20 |
|
21 | RAISE delete_exception;
|
22 |
|
23 | END IF;
|
24 |
|
25 | EXCEPTION
|
26 |
|
27 | WHEN delete_exception THEN
|
28 |
|
29 | DBMS_OUTPUT.PUT_LINE(Can not delete acc!');
|
30 |
|
31 | END;
|