Oracle觸發器解析

2021-12-30 09:10:25 字數 2222 閱讀 2579

作用:每當乙個特定的資料操作語句(insert、update、delete)在指定的表上發出時,oracle自動地執行觸發器中定義的語句序列。

第乙個觸發器:每當成功插入新員工後,自動列印「成功插入新員工」

觸發器的單詞:trigger

建立觸發器

create trigger saynewemp

after insert

on emp

declare

begin

dbms_output.put_line(『成功插入新員工』);

end;

saynewemp:觸發器名字

emp:與觸發器相關聯的表

觸發器的語法:

create [or replace] trigger 觸發器名

on 表名

[for each row[when(條件)]]

plsql塊

[of列名]:只有某列被更新時才觸發

[for each row[when(條件)]]:行級觸發器才有該語句

觸發器的型別:

語句級觸發器(針對的是表):在指定的操作語句操作之前或之後執行一次,不管這條語句影響了多少行

行級觸發器(針對的是行):觸發語句作用的每一條記錄都被觸發。在行級觸發器前使用:old和:new偽記錄變數,識別值的狀態。

觸發器的應用場景:

1、複雜的安全性檢查

禁止在非工作時候叫你插入新員工

週末:to_char(sysdate,』day』)in(『星期六』,』星期日』) 上班前,下班後:to_number(to_char(sysdate,』hh24』)) not between 9 and 18

create or replace trigger securitemp

before insert

on emp

begin

if to_char(sysdate,』day』)in(『星期六』,』星期日』) or

to_number(to_char(sysdate,』hh24』)) not between 9 and 18

--禁止insert 新員工

raise_application_error(『20001』,』禁止在非工作時間插入新員工』);

end if;

end;

2、資料確認

漲後的薪水不能少於漲前的薪水

1、:old和:new 代表同一條記錄

2、:old:表示操作該行之前,這一行的值

:new:表示操作該行之後,這一行的值

create or replace trigger checksalary

before update

on emp

for each row

begin

--if 漲後的薪水漲前的薪水then

--if:new.sal<:old.sal then>

raise_application_error(-20002,』漲後的薪水不能少於漲前的薪水,漲後的薪水』||:new.sal||』漲前的薪水』||:old.sal);

end if;

end;

3、實現審計功能(基於值的)

給員工漲工資,當漲後的薪水超過6000塊時候,審計該員工的資訊

--建立表,用於儲存審計資訊

create table audit_info

informatian varchar2(200)

create or replace trigger do_audit_emp_salary

after update

on emp

begin

--當漲後的薪水大於6000,插入審計資訊

if:new.sal>6000 then

insert into audit_info values(:new.empno||』 『||:new.ename||』 『||:new.sal);

end if;

4、完成資料的備份和同步

當給員工漲完工資後,自動備份新的工資到備份表中

create or replace trigger sync_salary

after update

on emp

for each row

begin

--當主表更新後,自動更新備份表

update emp_back set sal=:new.sal where empno=:new.empno;

end;

Oracle之觸發器解析說明

create or replace trigger dm1 log after insert or update or delete on xjpd.emp declare oper emp log.oper type begin if inserting then oper insert elsi...

ORACLE觸發器 行級觸發器

行級觸發器 本章介紹行級觸發器機制。大部分例子以insert出發器給出,行級觸發器可從insert update delete語句觸發。1 介紹 觸發器是儲存在資料庫已編譯的儲存過程,使用的語言是pl sql,用編寫儲存過程一樣的方式編寫和編譯觸發器。下面在sql plus會話中建立和示例乙個簡單的...

Mysql觸發器解析

由於業務需要,所以需要通過觸發器來實現,剛剛開始使用觸發器,遇到了一些坑,希望和我一樣的初始者能避開。create trigger trigger alarm month after insert on t alarm month stat for each row begin if disable...