SQL-Statement Trigger zeigt keine Wikrung PL/SQL

Jefferio_19

Mitglied
Der Trigger soll überprüfen ob der neue Gehalt nicht über 10% des alten liegt

CREATE OR REPLACE TRIGGER salaryCorr
before UPDATE of sal on EMP
FOR EACH ROW

BEGIN
if :new.sal> 😱ld.sal+(🙂old.sal/100)*10)
then dbms_output.put_line ('Sal to high');
end if;

end salaryCorr;

Trigger compiliert auch, aber bei einem Update zeigt er keine Wirkung, warum?
 
Der Trigger soll überprüfen ob der neue Gehalt nicht über 10% des alten liegt

CREATE OR REPLACE TRIGGER salaryCorr
before UPDATE of sal on EMP
FOR EACH ROW

BEGIN
if :new.sal> 😱ld.sal+🙂)old.sal/100)*10)
then dbms_output.put_line ('Sal to high');
end if;

end salaryCorr;

Trigger compiliert auch, aber bei einem Update zeigt er keine Wirkung, warum?

Also der folgender Trigger hier funktioniert bei mir:

CREATE OR REPLACE TRIGGER SCOTT.salaryCorr
BEFORE DELETE OR INSERT OR UPDATE ON SCOTT.EMP
FOR EACH ROW
/*
SALARYCORR (Trigger)
Trigger gibt Meldung aus, wenn new.sal > 1.1 * old.sal.
Author: abollm (fuer JavaForum.Org)
Date: 08.01.2016
*/
WHEN (
new.sal > 1.1 * nvl(old.sal,0.0)
)
DECLARE
sal_new number;
BEGIN
dbms_output.put('New salary: ' || :new.sal);
sal_new := 😱ld.sal;
:new.sal := sal_new;
dbms_output.put(' Old salary: ' || 😱ld.sal);
dbms_output.put_line(' New salary too high (> 1.1 * old salary) - reset sal!' || sal_new);
END;
/

Wichtig ist, dass ich den Trigger im DB-Schema SCOTT angelegt habe, also du müsstest ggf. den Schema-Namen anpassen. Ich habe den Trigger getestet und er funktioniert.

 
Den Trigger-Kopf solltest du noch so ändern, dass er nur im UPD-Fall zündet. Das hatte ich gestern übersehen. D.h. so:
Code:
CREATE OR REPLACE TRIGGER SCOTT.salaryCorr
BEFORE UPDATE ON SCOTT.EMP
FOR EACH ROW
...
 

Zurück
Oben