-
觸發(fā)器
應用場景:
復雜的安全性檢查
數(shù)據(jù)確認
實現(xiàn)審計功能
完成數(shù)據(jù)的備份和同步
觸發(fā)器的語法
觸發(fā)器類型
語句級觸發(fā)器和行級觸發(fā)器
案例
查看全部 -
/* 觸發(fā)器場景四:數(shù)據(jù)備份和同步 */ create?table?emp_back?as?SELECT?*?FROM?EMP; create?or?replace?trigger?back_sal_tri after?UPDATE on?EMP for?each?ROW DECLARE BEGIN --當員工薪資更新后自動備份 UPDATE?emp_back?set?sal?=?:new.sal?where?EMPNO?=?:new.EMPNO; END; SELECT?sal?from?EMP?where?EMPNO?=?'7499'; SELECT?sal?from?EMP_back?where?EMPNO?=?'7499'; update?emp?set?sal?=?sal?+?100?where?empno?=?'7499'
查看全部 -
/*觸發(fā)器應用場景三:?數(shù)據(jù)的審計---》基于值得審計功能 例子:給員工漲工資,當漲后的薪水超過6000塊時候,審計該員工的信息 創(chuàng)建表,用于保存審計信息 */ create?table?outdit_info(inforoudname?VARCHAR2(2000)); create?or?replace?trigger?outdit_emp_sal_tri after?UPDATE on?EMP for?each?row? BEGIN IF?:new.sal?>?6000?THEN ?insert?INTO?outdit_info?VALUES?(:new.EMPNO||'?'||:new.ename||'?'||:new.sal); end?if; END; UPDATE?emp?set?sal?=?sal?+?3000;
查看全部 -
觸發(fā)器使用作用場景:
復雜的安全性檢查
數(shù)據(jù)的確認
數(shù)據(jù)庫的審計
數(shù)據(jù)的備份和同步
查看全部 -
oracle中觸發(fā)器是同步備份
快照是異步備份
查看全部 -
觸發(fā)器案例四:數(shù)據(jù)的備份和同步
利用觸發(fā)
當給員工漲完工資后,自動備份新的工資到備份表中
創(chuàng)建備份表
創(chuàng)建觸發(fā)器
查看全部 -
觸發(fā)器案例三:數(shù)據(jù)庫的審計功能
基于值的審計功能
給員工漲工資,當漲后的薪水超過6000塊前時候,審計員工的信息。
/*創(chuàng)建表,用于保存審計信息*/
create table audit_info
(
????information varchar2(200)
);
create or replace trigegr do_audit_emp_salary
after update
on emp
for each row
begin?
????/*當漲后的薪水大于6000,插入審計信息*/
????if :new.sal > 6000 then?
????? ?insert into audit_info_values(:new.empno||'? ?'||:new.ename||'? ?'||:new.sal);
? ? end if;
end;
查看全部 -
觸發(fā)器案例二:數(shù)據(jù)確認
漲工資不能越長越少
?/*
漲后的薪水 , 漲前的薪水都是對同一條數(shù)據(jù)進行操作,需要使用到行級觸發(fā)器
:old和:new????代表同一條記錄
:old????表示操作改行之前,這一行的值
:new? ?表示操作改行之后,這一行的值
*/
create or repalce 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;
查看全部 -
觸發(fā)器案例一:復雜的安全性檢查
禁止在非工作時間插入新員工
非工作時間:
/*
周末:to_char(sysdate,'day') in('星期六','星期日')
上班前、下班后:to_number(to_char(sysdate,'hh24')) not between 8 and 18
*/
select to_char(sysdate,'day') 周,to_number(to_char(sysdate,'hh24')) 小時 ,sysdate from dual;
Create or repalce trigger securityemp
before insert /*在插入語句之前執(zhí)行PLSQL語句*/
on emp
declare/*程序中不需要使用變量的話 ,可省略不寫*/
begin
????if?to_char(sysdate,'day') in('星期六','星期日') or?
????? ?to_number(to_char(sysdate,'hh24')) not between 8 and 18 then
????????/*禁止insert新員工,Oracle錯誤的區(qū)間代碼自定義-20000到-20999*/
???????raise_application_error(-20001,'禁止在非工作時間插入新員工');
????end if;
end;? ??
查看全部 -
創(chuàng)建觸發(fā)器的語法:
????
????有FOR EACH ROW 就表明是行級觸發(fā)器,沒有則是語句級觸發(fā)器
觸發(fā)器的類型:
????語句級觸發(fā)器:針對是表
行級觸發(fā)器:針對是行
查看全部 -
觸發(fā)器的定義
????是一個與表相關(guān)聯(lián)的、存儲的PL/SQL程序。
觸發(fā)器的作用
????每當一個特定的數(shù)據(jù)操作欲絕(insert、update、delete)在指定的表上發(fā)出時,Oracle自動地執(zhí)行觸發(fā)器中定義的語句序列。
創(chuàng)建觸發(fā)器[在員工表中插入一條記錄,打印“成功插入新員工”這句話]
????create trigger saynewemp
? ? after insert
????on emp
????declare
????begin
????????dbms_output.put_line('成功插入新員工');
????end;
????/
查看全部 -
觸發(fā)器的應用場景
????1.復雜的安全性檢查
????2.數(shù)據(jù)確認
????3.實現(xiàn)審計功能
????4.數(shù)據(jù)備份和同步
觸發(fā)器的分類
????語句級觸發(fā)器和行級觸發(fā)器
????
查看全部 -
:old? 與 :new 的用法
查看全部 -
create or replace trigger trg
before/after
delete/insert/update(of 列)
on table
for each row(where 條件) --行級觸發(fā)器 觸發(fā)語句作用的每一條記錄都被觸發(fā)。 使用:old和:new偽記錄變量,識別值的狀態(tài)。
plsql塊
查看全部 -
觸發(fā)器的具體應用場景:?
復雜的安全性檢查
禁止在非工作時間添加員工(周末、9~17之外的時間),使用語句級觸發(fā)器
數(shù)據(jù)的確認:比如漲工資不能長成負的
數(shù)據(jù)庫審計:類似于操作日志
數(shù)據(jù)的備份和同步:主從數(shù)據(jù)同步
查看全部 -
create?trigger?add_new_emp ????after?insert?on?emp ?declare ? ?begin ?????dbms_output.puline('成功插入新員工'); ?end; ?/
查看全部 -
課程總結(jié):觸發(fā)器的應用場景。
查看全部 -
數(shù)據(jù)的備份和同步。觸發(fā)器是同步備份,沒有延遲??煺帐钱惒絺浞?。
查看全部
舉報