1. 程式人生 > >【Oracle強化】⑨第九章 觸發器

【Oracle強化】⑨第九章 觸發器

1.編寫觸發器實現如下功能:
對修改職工工資進行合法性檢查:
a.修改後的工資大於修改前的工資
b.工資增量不能超過原工資的10%
c.目前部門號為10號部門的員工不漲工資
 
2.用觸發器生成一個主鍵,員工編號的主鍵
  ‘NEU’ +員工參加工作時間+員工序號
   neu2012033111125
   自動生成新增主鍵。
3、建立一個表tmp_table,包含empno、ename、sal_old、sal_new、job五列資訊
   在emp表上建立一個update行觸發器,當新的薪水小於原有的薪水時,在tmp_table表中填加一行資訊。

9.2DML觸發器 
9.2.1DML語句觸發器
1、
CREATE OR REPLACE PROCEDURE secure_dml 
IS 
BEGIN 
	IF (TO_CHAR(SYSDATE, 'DY') in ('星期六','星期日')) or 
	(TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:45' AND '17:30') THEN
		RAISE_APPLICATION_ERROR (-20205, '你只能在正常的辦公時間改變資料'); 
	END IF; 
END secure_dml;
1)、 
CREATE OR REPLACE TRIGGER secure_prod BEFORE INSERT OR UPDATE OR DELETE ON dept 
BEGIN 
			secure_dml; 
END secure_prod; 
2)、 
INSERT INTO dept VALUES (50,’dep50’,’shenyang’);
9.2.2DML行觸發器
1、
Create table tmp_table(
Empno	number(4),
Ename	varchar2(10),
Sal_old	number(7,2),
Sal_new	number(7,2),
Job		 varchar2(10));
2、
Create or replace trigger sal_emp 
after update  on emp 
for each row
Begin
	if(:new.sal <:old.sal) then
		insert into tmp_table values(:old.empno,:old.ename,
			:old.sal,:new.sal,:old.job);
	end if;
End;
update emp set sal=2000;