Oracle11g學習 觸發器

2021-08-20 14:14:37 字數 3483 閱讀 7390

1  觸發器

1.1      語法

【語法】

create [or replace] trigger 《觸發器名》

before|after

insert|delete|update [of 《列名》] on 《表名》

[for each row]

【說明】

關鍵字"before"在操作完成前觸發;"after"則是在操作完成後觸發;

關鍵字"for each row"指定觸發器每行觸發一次,若不指定則為表級觸發器.

關鍵字"of 《列名》" 不寫表示對整個表的所有列.

pl/sql塊中不能使用commit;

【特殊變數】

:new --為乙個引用最新的行值;

:old --為乙個引用以前的行值;

這些變數只有在使用了關鍵字 "for each row"時才存在.且update語句兩個都有,而insert只有:new ,delect 只有:old;

1.2      行級觸發器

【示例1】漲工資

/*觸發器使用:給員工漲工資(漲後工資應該大於漲前)後,在後台輸出更新前和更新後的工資

*/create or replace trigger

tri_emp_upd_sal

after

update of

sal

onemp

for each row

begin

if :old.sal

<:

new.sal

then

dbms_output.put_line('

更新前工資為:'

||:old.sal||'

,更新後工資為:'

||:new.sal

); else

(-20002,'

工資不能越漲越低!'

); end if

; end; /

-- 更新工資值,並觸發行級觸發器

update

emp

setsal

=8888

where

empno

=1002

;【示例2】觸發器+序列實現主鍵自增長

/*觸發器使用:給emp表的empno新增觸發器,在插入記錄時自動填入值

*/-- 1

、建立序列

create sequence

seq_emp_empno;

-- 2

、建立觸發器

create or replace trigger

tri_emp_ins_empno

before

insert on

emp for each row

begin

-- 給將要插入表的記錄:new 中的empno設定sequence中的值

select

seq_emp_empno.nextval

into

:new.empno

from

dual

; end; /

-- 新增員工資料,測試觸發器+序列的組合使用

insertinto

emp(

ename

,sal

)values

('itcast002'

,2000

); commit

;1.3     表級觸發器

/*觸發器使用:刪除表的同時備份表資料到另一張備份表

*/-- 1

、從emp表結果中建立一張表並複製資料

create table

emp2 

as select 

* from

emp;

-- 2

、建立備份表emp_bak

create table

emp_bak

as select 

* from

emp2

where1=

2;-- 3

、建立表觸發器,當對表操作時觸發

create or replace trigger

tri_emp2_del

before

delete on

emp2

begin

-- 將emp2表中的資料備份到emp_bak

insert into

emp_bak

select

* from

emp2

; end; /

-- 4

、測試刪除emp2表的資料

delete from

emp2

; select 

* from

emp2

; select 

* from

emp_bak

;1.4    開啟禁用觸發器

禁用某個觸發器

alter trigger 《觸發器名》 disable

【示例】

alter trigger

tri_emp_upd_sal

disable

; update

emp

setsal

=8888 

where

empno

=1002

; 【重新啟用觸發器

alter trigger 《觸發器名》 enable

【示例】

alter trigger

tri_emp_upd_sal

enable

; update

emp

setsal

=8888

where

empno

=1002

; 【禁用表的所有觸發器

alter table 《表名》 disable all triggers;

【示例】

alter table

emp

disable all triggers

; 【啟用表的所有觸發器

alter table 《表名》 enable all triggers;

【示例】

alter table

emp

enable all triggers

; 【刪除觸發器

drop trigger 《觸發器名》;

【示例】

drop trigger

tri_emp_upd_sal

;

oracle 11g實驗五 觸發器的使用

實驗要求 實驗目的 1 理解觸發器的概念 作用及分類 2 掌握觸發器的建立 使用 實驗內容 1 建立表orders 用於儲存訂單列表資訊 表order items 用於儲存單個訂單的詳細資訊。其結構分別為 表1 orders表結構 欄位名字段型別 字段寬度 說明id number 訂單編號 主鍵 o...

《學習》11觸發器

觸發器 use db select from sss create table sssbak like sss show create table sss show create table sssbak create table sssbak sid int 10 unsigned not nul...

《學習》11觸發器

觸發器 use db select from sss create table sssbak like sss show create table sss show create table sssbak create table sssbak sid int 10 unsigned not nul...