日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【Oracle】触发器最系统入门学习指导

發布時間:2025/3/20 windows 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Oracle】触发器最系统入门学习指导 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:通過本次學習您可以學到什么


目錄:

一、什么是觸發器?

二、觸發器的應用場景是什么?

? 1、復雜的安全性檢查

? 2、數據的確認

? 3、實現審計功能

? 4、完成數據的備份和同步

三、觸發器的語法是什么?

四、觸發器的類型有哪些?

? 1、語句級的觸發器

? 2、行級的觸發器

五、案例介紹


----------------------------------------------------------------------------------------------

一、什么是觸發器?

每當一個特定的數據操作語句(insert、update、delete)在指定的表上發出時,Oracle自動地執行觸發器中定義的語句序列。

注意select語句不在上述的操作范圍內。

第一個觸發器:每當成功插入新員工信息后,自動打印“成功插入新員工”。

如何創建觸發器

create trigger savenewemp

after insert

on emp

declare

begin

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

end;

/

這個oracle中的觸發器就非常類似于我們熟悉的java中的監聽器。



二、觸發器的應用場景是什么?

? 1、復雜的安全性檢查

當我們需要安全性策略的時候,比如周末禁止操作數據庫等。

? 2、數據的確認

比如我們漲工資的時候,如果工資變少了,就可以用觸發器進行確認。

? 3、實現審計功能

跟蹤表上所做的數據操作,目前也在oracle中單獨實現,也可以用觸發器實現,這種審計叫做基于值的審計

? 4、完成數據的備份和同步



三、觸發器的語法是什么?


上面我們漏提到了一句語法:[For each row[when(條件)]]

首先我們需要先了解觸發器的類型,如果有上面這句[For each row[when(條件)]]的話,那他就是行級觸發器。


四、觸發器的類型有哪些?

語句級觸發器:在指定的操作語句操作之前或者之后執行一次,不管這條語句影響了多少行。

針對的是表。

行級觸發器:觸發語句作用的每一條記錄都被觸發,在行級觸發器中我們使用:old和:new偽記錄變量,識別值得狀態。

針對的是行。


五、觸發器的應用場景?

? 1、復雜的安全性檢查

實施復雜的安全性檢查:禁止在非工作時間插入新員工。

/*

1、周末:to_char(sysdate,'day') in ('星期六','星期日')

2、上班前(9),下班后(18):to_number(to_char(sysdate,'hh24')) not between 9 and 18

*/

create or replace trigger securityemp

before insert

on emp

declare

begin

if?to_char(sysdate,'day') in ('星期六','星期日')

or?to_number(to_char(sysdate,'hh24')) not between 9 and 18

then

-- 禁止insert新員工

raise_application_error(-20001,'禁止在非工作時間插入新員工!');

end;

/

注意,上面的raise_application_error函數中的第一個參數的值范圍是-20000~-29999

上面這個例子就是針對表的一個操作,所以沒有[For each row[when(條件)]]



? 2、數據的確認

漲工資不能越漲越少,每一條記錄都需要檢查,必然這個觸發器是行級觸發器。

/*

漲后的薪水不可以少于漲前的薪水

1、:old \ :new :代表的是同一條記錄。

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

3、: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,'漲后的薪水不可以少于漲前的薪水!');

end if;

end;

/


上面這個例子就是針對每一行的一個操作,所以有[For each row[when(條件)]]


??

? 3、實現審計功能

創建基于值得觸發器

/*

數據庫的審計---》基于值得審計功能

給員工漲工資,當漲后的工資超過6000元的時候,審計該員工的信息。

*/

--創建表,用于保存審計信息

create table audit_info

(

information varchar2(200)

)


create or replace trigger do_audit_emp_salary

after update

on emp

for each row

declare

begin

--當漲后的薪水大于6000,插入審計信息

if :new.sal > 6000 then

insert into audit_info values(:new.empno|| ' ?'|| :new.ename||' ?'||:new.sal);

end if;

end;

/



上面這個例子就是針對每一行的一個操作,所以有[For each row[when(條件)]]


? 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;

/



上述是同步備份,若無網絡壓力,則無延遲。

下面還有一種快照備份我們不做詳述。


本章小結,希望對您有所幫助:

數據庫的觸發器是一個與表相關聯的、存儲的PL/SQL程序。

四個場景:

1、復雜的安全性檢查

2、數據的確認

3、數據庫的審計

4、數據的備份和同步


總結

以上是生活随笔為你收集整理的【Oracle】触发器最系统入门学习指导的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。