程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 關於oracle觸發器的兩個小例子

關於oracle觸發器的兩個小例子

編輯:Oracle教程

關於oracle觸發器的兩個小例子


今天接到一個任務,需要修改觸發器,因為好久都沒有看過關於oracle觸發器的東東了,所以這裡通過兩個簡單的小例子復習下觸發器,以備忘。

1. 案例一

需求:建立觸發器,判斷員工工資,如果小於0,則改為0;如果大於10000,則改為10000

建表:

create table emp1(
  e_id number primary key not null,
  e_no number,
  e_name varchar2(20),
  e_sal number
)

select * from emp1;
create sequence seq_emp1_id;

建觸發器:

create or replace trigger trg_add_emp
  before insert or update on emp1 for each row
  declare
    v_e_sal emp1.e_sal%type;
  begin
    v_e_sal := :new.e_sal;
    
    if v_e_sal < 0 then
       v_e_sal := 0;
    elsif v_e_sal > 10000 then
       v_e_sal := 10000;
    end if;
    
    :new.e_sal := v_e_sal;
    
  exception
    when others then
    dbms_output.put_line(sqlcode||sqlerrm);    
end;
測試:

insert into emp1(e_id,e_no,e_name,e_sal) values(seq_trg_id.nextval,1,'zhangsan',100000);
commit;
insert into emp1(e_id,e_no,e_name,e_sal) values(seq_trg_id.nextval,2,'zhangxiaosan',-10);
commit;
insert into emp1(e_id,e_no,e_name,e_sal) values(seq_trg_id.nextval,3,'lisi',-10);
commit;

update emp1 set e_sal = -10 where e_id = 1;
commit;

2. 案例二:

需求:建立觸發器,將emp1表刪除的記錄放emp2表中

建表:

create table emp2(
  id number primary key not null,
  e_no number,
  e_name varchar2(20),
  del_date date
)

select * from emp1;
create sequence seq_emp2_id;
觸發器:

create or replace trigger trg_del_emp
  before delete on emp1 for each row
  declare
  
  begin
    insert into emp2(id, e_no, e_name, del_date) values(seq_emp2_id.nextval, :old.e_no, :old.e_name, sysdate);
  
  exception
    when others then
    dbms_output.put_line(sqlcode||sqlerrm);    
end;
測試:

insert into emp1(e_id,e_no,e_name,e_sal) values(seq_trg_id.nextval,3,'wangwu',999);
commit;

select * from emp1;
delete from emp1 where e_no = 3;
commit;

select * from emp1;
select * from emp2;

說明:

:old 表示訪問操作前列的值

:new 表示訪問操作後列的值

觸發器中賦值使用:= (切記)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved