Oracle觸發器
阿新 • • 發佈:2017-06-08
prim let values err rac null insert tput dbms
-----------------------------觸發器----------------------- --定義方式: create or replace trigger 觸發器名稱 before | after insert | update [ of 列名] | delete -- insert or update or delete on 表名 [for each row] [declare] begin end; ---向emp中插入一條數據,打印一句話“新增一名員工” create or replace trigger tri_add after delete -- insert or update or delete on emp begin dbms_output.put_line(‘新增一名員工‘); end; insert into emp(empno) values(12); ---假如今天2017-06-08系統維護,禁止修改emp中的數據 create or replace trigger tri_emp before insert or update or delete on emp --for each row declare v_date_str varchar2(20); begin select to_char(sysdate,‘yyyy-mm-dd‘) into v_date_str from dual; if v_date_str=‘2017-06-08‘ then -- 判斷當前時間是否是2017-06-08 --如果是 錯誤的提示窗口 raise_application_error(-20002,‘今天2017-06-08系統維護,禁止修改emp中的數據‘); end if; end; insert into emp(empno) values(23); select * from emp update emp set ename=‘TOM‘ where empno=11 delete from emp where empno=11 create table t_test( tid number(6) primary key, tname varchar2(30) ) create sequence seq_test; select * from t_test insert into t_test(tname) values(‘tom‘); create or replace trigger tri_test before insert on t_test for each row --如果用到:new 或者:old 必須使用for each row declare begin -- :new :old 偽記錄 --對即將插入的數據設置tid select seq_test.nextval into :new.tid from dual; end; :new :old update delete null insert null update emp set ename=‘TOM‘ where empno=11 --------------備份數據 修改員工的工資,把工資數據做備份 創建一個工資備份表 create table sal_backup( sid number(7) primary key, empno number(7), sal0 number(7,2),--修改之前 sal1 number(7,2),--修改之後 sal_date date ) create sequence seq_sal_backup create or replace trigger tri_sal before update of sal --只針對修改sal on emp for each row declare --:new :old begin insert into sal_backup values(seq_sal_backup.nextval,:new.empno,:old.sal,:new.sal,sysdate); end; update emp set sal=1000 where empno=11
Oracle觸發器