触发器after和before

--after和before
CREATE OR REPLACE TRIGGER del_emp1
               BEFORE update OR insert OR delete ON scott.emp
         REFERENCING new AS nn  old AS oo
         FOR EACH ROW
         WHEN (nn.sal > 2000)
BEGIN
         IF INSERTING THEN
            dbms_output.put_line('THE OPERATION IS INSERT');
         ELSIF UPDATING THEN
             dbms_output.put_line('THE OPERATION IS UPDATE');
         ELSIF DELETING THEN
             dbms_output.put_line('THE OPERATION IS DELETE');
         ELSE
             dbms_output.put_line('OTHERS OPERATION');
         END IF;
END;
CREATE OR REPLACE TRIGGER del_emp2
               after update OR insert OR delete ON scott.emp
         REFERENCING new AS nn  old AS oo
         FOR EACH ROW
         WHEN (nn.sal > 2000)
BEGIN
         IF INSERTING THEN
            dbms_output.put_line('THE OPERATION IS INSERT');
         ELSIF UPDATING THEN
             dbms_output.put_line('THE OPERATION IS UPDATE');
         ELSIF DELETING THEN
             dbms_output.put_line('THE OPERATION IS DELETE');
         ELSE
             dbms_output.put_line('OTHERS OPERATION');
         END IF;
END;
update emp set sal=7000 where emp.ename='SMITH';
--after和before的区别是:before是先执行begin后触发触发器,after是先执行触发器而后执行begin内容.
CREATE OR REPLACE TRIGGER check_emp
               BEFORE update OR insert OR delete ON scott.emp
         REFERENCING new AS nn old AS oo
         FOR EACH ROW
         /*WHEN (nn.sal < 2000)*/
BEGIN
         IF INSERTING THEN
            dbms_output.put_line('THE OPERATION IS INSERT');
         ELSIF UPDATING THEN
             dbms_output.put_line('THE OPERATION IS UPDATE');
         ELSIF DELETING THEN
             dbms_output.put_line('THE OPERATION IS DELETE');
         ELSE
             dbms_output.put_line('OTHERS OPERATION');
         END IF;
END;
select * from emp;
begin  
       savepoint s1;
       delete emp where sal=4000;
       rollback to s1;
end;

       

 

posted @ 2017-08-01 14:55  kiskistian  阅读(526)  评论(0编辑  收藏  举报