Oracle之觸發器

perfychi發表於2012-08-02

1.        用觸發器跟蹤對錶EMPDML操作資訊,提供審計和日誌記錄。(提示:使用觸發器謂詞)

n      插入測試:

Create table temp(aa varchar2(100));

Insert into emp(empno,ename,job,sal) values(7962,'ROSE', 'CLERK', 2100);

執行結果如下:

已在 EMP 中插入資料!

-- 刪除測試:

Delete from emp where empno=7962;

執行結果如下:

已刪除 EMP 中的資料!

-- 修改測試:

Update emp set sal=2000 where empno=7962;

執行結果如下:

已更新 EMP 中的資料!

Set serverouput on

create or replace trigger change_emp

before insert or delete or update on emp

for each row

declare result varchar2(50);

begin

If inserting then

       result:=to_char(sysdate,'YY_MON_DD HH24:MI:SS')||'已經向EMP表中插入'||:new.empno||'記錄!';  

elsif deleting then

       result:=to_char(sysdate,'YY_MON_DD HH24:MI:SS')||'已經從EMP表中刪除'||:old.empno||'記錄!';   

elsif updating then

       result:=to_char(sysdate,'YY_MON_DD HH24:MI:SS')||'已經在EMP表中更新'||:old.empno||'記錄!';   

end If;

dbms_output.put_line(result);

insert into temp values(result);

end;

2.        建立觸發器CHECK_SAL,禁示對職務為CLERK的僱員的工資修改值超出10002000的範圍,即CLERK職務員工的修改後工資值只能在1000~2000之間。要求測試該觸發器。

create or replace trigger update_clerk_sal

before update on emp

for each row

declare result varchar2(100);

begin

       if lower(:old.job)='clerk' then

              if :new.sal>2000 or :new.sal<1000 then

                     raise_application_error(-20000,:old.empno||'的工資修改不符合規定,只能位於1000-2000!');

              end if;

       end if;

end;

update emp set sal=sal+1 where empno=7962

update emp set sal=sal-1001 where empno=7962

update emp set sal=sal-1 where empno=7962


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-739588/,如需轉載,請註明出處,否則將追究法律責任。

相關文章