亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle中觸發(fā)器示例詳解

2024-08-29 14:01:13
字體:
供稿:網(wǎng)友

前言

在ORACLE系統(tǒng)里,觸發(fā)器類似過程和函數(shù),都有聲明,執(zhí)行和異常處理過程的PL/SQL塊。

觸發(fā)器類型

觸發(fā)器在數(shù)據(jù)庫里以獨(dú)立的對象存儲,它與存儲過程和函數(shù)不同的是,存儲過程與函數(shù)需要用戶顯示調(diào)用才執(zhí)行,而觸發(fā)器是由一個事件來啟動運(yùn)行。即觸發(fā)器是當(dāng)某個事件發(fā)生時自動地隱式運(yùn)行。并且,觸發(fā)器不能接收參數(shù)。所以運(yùn)行觸發(fā)器就叫觸發(fā)或點(diǎn)火(firing)。ORACLE事件指的是對數(shù)據(jù)庫的表進(jìn)行的INSERT、UPDATE及DELETE操作或?qū)σ晥D進(jìn)行類似的操作。ORACLE將觸發(fā)器的功能擴(kuò)展到了觸發(fā)ORACLE,如數(shù)據(jù)庫的啟動與關(guān)閉等。所以觸發(fā)器常用來完成由數(shù)據(jù)庫的完整性約束難以完成的復(fù)雜業(yè)務(wù)規(guī)則的約束,或用來監(jiān)視對數(shù)據(jù)庫的各種操作,實(shí)現(xiàn)審計的功能。

開發(fā)中肯定會用到Oracle的觸發(fā)器,本文進(jìn)行詳細(xì)講解。

這里實(shí)例中用到的主要是Oracle中scott用戶下的emp以及dept表,數(shù)據(jù)如下

Oracle,觸發(fā)器Oracle,觸發(fā)器

一、觸發(fā)器概念

1、概念:

觸發(fā)器的本質(zhì)是一個存儲過程,顧名思義發(fā)生特定事件時Oracle會執(zhí)行觸發(fā)器中的代碼。細(xì)分它的組成可以分為3個部分:第一部分在什么條件下觸發(fā)器會執(zhí)行,即觸發(fā)器被觸發(fā)的事件。第二部分在什么時間點(diǎn)執(zhí)行觸發(fā)器即觸發(fā)器的發(fā)生事件例如before,after。第三部分觸發(fā)器自身所要做的事情,就是觸發(fā)器被觸發(fā)以后具體想表達(dá)的事件,在begin和end之間的sql。

二、觸發(fā)器的分類:

1、ddl觸發(fā)器:即執(zhí)行ddl操作后所觸發(fā)的事件。

常用的ddl操作有:grant(授權(quán)),revoke(撤銷授權(quán)),create(創(chuàng)建),drop(刪除),alter(修改),comment(注釋),audit(審核),rename(重命名)在進(jìn)行具體實(shí)例以前先來講解另一個概念:oracle中的user和schema:

user:oracle中的用戶,擁有數(shù)據(jù)庫的對象以及對數(shù)據(jù)庫對象增刪改查的權(quán)限。schema:該用戶下所有數(shù)據(jù)庫對象的集合Collection.類似于生活中房子schema和房子的擁有者user之間的關(guān)系,你是一個用戶user你可以通過alter session查看別人的房子,但是你是否可以改變房子中的家具,要看這個房子的擁有者是否grant你這個權(quán)限,除非你是所有房子的最高權(quán)限人dba。

ddl Example:禁止scott用戶的所有ddl操作

CREATE OR REPLACE TRIGGER scott_triggerBEFORE DDLON SCHEMABEGIN RAISE_APPLICATION_ERROR(-20008,'禁止scott用戶的所有ddl操作');END;
create sequence myseq;

Oracle,觸發(fā)器

這里看到在創(chuàng)建觸發(fā)器以后如果仍然使用ddl操作,便會報錯。

2、dml觸發(fā)器:基于dml操作的觸發(fā)器,細(xì)分又可以分為行觸發(fā)器和語句觸發(fā)器。

A、語句觸發(fā)器:dml操作可能會影響很多行,主要用于對數(shù)據(jù)的安全保護(hù)。

Example:禁止在周四,周五修改emp表數(shù)據(jù)

CREATE OR REPLACE TRIGGER emp_triggerBEFORE UPDATE OR DELETE OR INSERTON empBEGIN IF to_char(sysdate,'day') IN ('星期四','星期五') THEN RAISE_APPLICATION_ERROR(-20008,'不允許在周四周五修改emp表'); END IF;END;
update emp set sal=800;

Oracle,觸發(fā)器

這里建立觸發(fā)器以后,當(dāng)你想改變所有人的工資時就會出觸發(fā)器的錯誤,所有人的工資即表示會影響很多行。

B、行級觸發(fā)器:針對需要操作的那一行,有關(guān)鍵詞:for each row,用來

(1)實(shí)現(xiàn)數(shù)據(jù)的審計功能:

Example:做一個記錄刪除員工信息的表記錄被刪除員工的信息

這里為了不改變oracle中emp表的數(shù)據(jù),新建一個emp_new表

create table emp_newasselect * from emp;
create table emp_audit(name varchar2(10),delete_time Date);
CREATE OR REPLACE TRIGGER delete_triggerAFTER DELETE ON emp_newFOR EACH ROWBEGIN INSERT INTO emp_audit values(:old.ename,sysdate);END;
delete from emp_new where empno='7499';
select * from emp_audit;

Oracle,觸發(fā)器

這里可以看到在創(chuàng)建觸發(fā)器時,用到了for each row關(guān)鍵詞,:old.***用來表示更改以前的表中的數(shù)據(jù),:new.***用來表示更改以后的數(shù)據(jù),在刪除數(shù)據(jù)以后在日志表就有對應(yīng)的記錄。

(2)實(shí)現(xiàn)數(shù)據(jù)完整性:

Example:要求員工漲工資后,不能低于原來的工資,所漲工資也不能高于原來的50%。

這里為了不改變oracle中emp表的數(shù)據(jù),新建一個emp_new表

create table emp_newasselect * from emp;
CREATE OR REPLACE TRIGGER emp_triggerBEFORE UPDATE OF sal ON emp_newFOR EACH ROWWHEN (new.sal<old.sal OR new.sal>1.5*old.sal)BEGIN RAISE_APPLICATION_ERROR(-20008,'工資只增不降,且漲幅不可大于50%');END;
update emp_new set sal = 1.6*sal where empno='7788';

Oracle,觸發(fā)器

這里可以看到當(dāng)改變數(shù)據(jù)時會觸發(fā)觸發(fā)器錯誤,對表中某一個字段的修改用UPDATE OF即可,另外如果new和old在PLSQL塊的外部即BEGIN外面不可以加冒號。

(3)參照完整性:

Example:主要用于級聯(lián)更新,如更新dept表中的deptno時,emp表的deptno也更新。

這里仍然新建2個表分別和emp表dept表的數(shù)據(jù)相同。

create table emp_newasselect * from emp;
create table dept_newasselect * from dept;
CREATE OR REPLACE TRIGGER cascade_triggerAFTER UPDATE OF deptno ON dept_newFOR EACH ROWBEGIN UPDATE emp_new SET deptno=:new.deptno WHERE deptno=:old.deptno;END;
update dept_new set deptno=15 where deptno=20;
select * from dept_new;

Oracle,觸發(fā)器

select * from emp_new;

Oracle,觸發(fā)器

這里參照完整新指具有主從關(guān)系的多個表,當(dāng)更新主表主鍵時需要更新從表的相關(guān)數(shù)據(jù)。

3、替代觸發(fā)器:

這里先講另一個概念:帶有with check option的視圖:

如果視圖的定義包括條件(如where子句)并且任何應(yīng)用于該視圖的INSERT或UPDATE語句都應(yīng)包括該條件,則必須使用WITH CHECK OPTION定義該視圖。

Example:

CREATE VIEW emp_view(ename,empno)AS SELECT ename,empno FROM emp WHERE deptno=20WITH CHECK OPTION;

這里有個條件部門號為20,則任何修改這個視圖的語句都必須針對的是20號部門的員工。

繼續(xù)替代觸發(fā)器的概念:關(guān)鍵字insteadof,主要針對一些復(fù)雜的視圖,因?yàn)榧壜?lián)表所產(chǎn)生的視圖不可以使用update,insert,delete等關(guān)鍵字,沒有before,after等關(guān)鍵字,并且不可以建立在with check option選項的視圖上,比如新建一個emp表和dept表的級聯(lián)視圖,則不可以向其中添加數(shù)據(jù),現(xiàn)在通過觸發(fā)器解決:

Example:

仍然新建2個表分別和emp表dept表的數(shù)據(jù)相同。

CREATE TABLE emp_newASSELECT * FROM emp;CREATE TABLE dept_newASSELECT * FROM dept;
CREATE VIEW emp_deptASSELECT d.deptno,d.dname,e.empno,e.enameFROM dept_new d,emp_new eWHERE d.deptno=e.deptno;

這里scott用戶需要先通過sysdba授權(quán)才能建立視圖:

grant create view to scott;
CREATE OR REPLACE TRIGGER insteadof_triggerINSTEAD OF INSERT ON emp_deptFOR EACH ROWDECLARE v_temp INT;BEGIN SELECT COUNT(*) INTO v_temp FROM dept_new WHERE deptno=:new.deptno; IF v_temp=0 THEN  INSERT INTO dept_new(deptno,dname) VALUES(:new.deptno,:new.dname); END IF;  SELECT COUNT(*) INTO v_temp FROM emp_new WHERE empno=:new.empno; IF v_temp=0 THEN  INSERT INTO emp_new(deptno,empno,ename) VALUES(:new.deptno,:new.empno,:new.ename); END IF;END;
INSERT INTO emp_dept values(15,'HUMANRESOURCE',7999,'LEAF');
select * from emp_new;

Oracle,觸發(fā)器

select * from dept_new;

Oracle,觸發(fā)器

這里觸發(fā)器中當(dāng)對視圖進(jìn)行insert時,會對相應(yīng)的emp_new 和dept_new進(jìn)行修改,也就做到了對復(fù)雜視圖的修改。

4、系統(tǒng)觸發(fā)器:顧名思義,由系統(tǒng)觸發(fā)器所觸發(fā)的事件,常用的系統(tǒng)事件startup,shutdown,db_roll_change,server error等。

Example:記錄啟動數(shù)據(jù)庫時的事件以及時間。

此處因?yàn)槭窍到y(tǒng)觸發(fā)器,所以需要用sysdba的權(quán)限登陸。

CREATE TABLE event_table(event VARCHAR2(50),event_time DATE);
CREATE OR REPLACE TRIGGER event_triggerAFTER STARTUP ON DATABASEBEGIN INSERT INTO event_table VALUES(ora_sysevent,sysdate);END;

Oracle,觸發(fā)器

select * from event_table;

Oracle,觸發(fā)器

三、觸發(fā)器的綜合實(shí)例

Example:做一個日志用來記錄scott用戶的一些操作:

首先在sysdba權(quán)限下建立日志表,序列,觸發(fā)器:

CREATE TABLE object_log(logid NUMBER CONSTRAINT pk_logid PRIMARY KEY,operatedate DATE NOT NULL,objecttype VARCHAR2(50) NOT NULL,objectowner VARCHAR2(50) NOT NULL);
CREATE SEQUENCE obj_log_seq;
CREATE OR REPLACE TRIGGER object_triggerAFTER CREATE OR DROP OR ALTER ON DATABASEBEGIN INSERT INTO object_log VALUES(obj_log_seq.nextval,sysdate,ora_dict_obj_type,ora_dict_obj_owner);END;

在scott用戶下隨便創(chuàng)建個東西:

CREATE SEQUENCE my_seq;

回到sysdba權(quán)限下查看日志表中是否有對應(yīng)的記錄:

SELECT * FROM object_log;

Oracle,觸發(fā)器

發(fā)現(xiàn)有數(shù)據(jù),說明一個日志表成功做好,監(jiān)視一些用戶操作的觸發(fā)器就做好了。至此,觸發(fā)器全部說明完畢,不足之處還請評論說明,謝謝。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到oracle教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产乱xxⅹxx国语对白| 老司机午夜福利视频| 丰满人妻av一区二区三区| 91精品又粗又猛又爽| 亚洲在线观看网站| 爽爽爽爽爽爽爽成人免费观看| 在线成人激情视频| 欧美成人精品在线观看| 国产亚洲免费的视频看| 免费在线看黄| 最近2019好看的中文字幕免费| 一本色道久久综合熟妇| 四虎成人影院网址| 欧洲在线一区| 欧美成人一二区| 日韩精品欧美专区| 成人写真视频福利网| 亚洲精品一区国产精品| 囯产精品久久久久久| 伊人男人综合视频网| 日韩欧美国产系列| 日韩欧美视频一区二区三区四区| 午夜精品视频一区二区三区在线看| www.黄色网| 欧美激情一区二区三区四区| 欧美色图中文字幕| 天天干在线观看| 国产丝袜护土调教在线视频| 日韩二区三区在线| 青娱乐91视频| 亚洲综合精品自拍| 啪啪av大全导航福利综合导航| 露出调教综合另类| 在线精品亚洲一区二区不卡| 亚洲色图久久久| 亚洲精品v亚洲精品v日韩精品| 天堂视频免费在线观看| 国产欧美综合在线观看第十页| 嫩草视频在线观看| 成人在线小视频| h视频在线观看免费网站| 精品国产乱子伦| 日本电影在线观看| 91美女精品福利| 亚洲成a人片在线不卡一二三区| 精品人妻一区二区三区免费| 丰满少妇乱子伦精品看片| 四虎黄色影院| eeuss影院www免费看| 日本免费一区二区三区四区| 性生活一级大片| 91精品啪在线观看国产爱臀| 在线观看免费观看在线| 中文字幕 在线观看| 十八禁一区二区三区| 九九九久久国产免费| 免费的色视频| 丁香色欲久久久久久综合网| 亚洲色图综合区| 亚洲欧美乱综合图片区小说区| 久久久久香蕉视频| 精品一成人岛国片在线观看| 国产性猛交96| 欧美丰满熟妇xxxxx| 国产麻豆一精品一av一免费| 国产高清免费av在线| 日本一本久久| 国产肉丝袜一区二区| 欧美巨乳在线观看| 99v久久综合狠狠综合久久| 国产成人免费在线| 日本熟妇人妻中出| 丰满少妇xoxoxo视频| 国产美女视频免费看| 中文在线资源观看视频网站免费不卡| 国产亚洲高清视频| 软萌小仙自慰喷白浆| 加勒比在线一区二区三区观看| 87福利电影网| 日本不卡视频一区| 波多野结衣亚洲| 亚洲www啪成人一区二区麻豆| аⅴ资源天堂资源库在线| 欧美视频自拍偷拍| 日韩一区国产在线观看| 免费观看成年人视频在线观看| 日本在线视频中文有码| 免费av片在线观看一道本| 欧美在线观看www| 亚洲一区在线电影| 中文乱码字幕高清一区二区| 亚洲一区二区三区四区五区午夜| 国产一级做a爰片在线看免费| 9i看片成人免费高清| 18性欧美xxxⅹ性满足| jizzjizz丝袜老师| 国产成人无码精品久久久性色| www.午夜| 中文字幕第22页| 亚洲小视频在线观看| 人妻一区二区视频| 午夜激情福利视频| 久久久一二三区| www.av一区视频| 欧洲猛交xxxx乱大交3| 四虎8848精品成人免费网站| 欧美福利一区二区三区| 91涩漫在线观看| a天堂中文在线观看| jizz18女人| 在线播放国产精品二区一二区四区| 久久无码人妻精品一区二区三区| 日本电影全部在线观看网站视频| 国产精品一区二区久久不卡| 国产一区二区三区香蕉| 国产伦精品一区二区三区视频网站| 国产女主播喷水高潮网红在线| 2018高清国产日本一道国产| 国产精品大片免费观看| 欧美一二三区精品| 久久久久亚洲av片无码v| 久国产精品韩国三级视频| www夜片内射视频日韩精品成人| 永久免费毛片在线播放| 亚洲成人福利在线| 中文字幕一区日韩电影| 男女啪啪免费视频网站| 日本韩国免费观看| 国产精品高潮在线| 欧美与动交zoz0z| 波多野结衣欲乱| 五月婷婷丁香花| 欧美国产视频日韩| 啪一啪鲁一鲁2019在线视频| 精品日产免费二区日产免费二区| 宅男在线国产精品| 国产精品日韩二区| 日本在线视频网址| 亚洲色图二区| 欧美视频在线免费看| 久久青青草原| 麻豆精品精品国产自在97香蕉| 爽爽影院免费观看视频| 中文字幕视频在线播放| 免费h片在线观看| 欧美一级二级三级蜜桃| 国产成人精品亚洲精品色欲| 日本在线中文电影| 欧美色片在线观看| 偷拍自拍在线视频| 亚洲精品中文字幕女同| 综合一区二区三区| 国产成人精品免费看在线播放| 欧美高清在线精品一区| 老牛嫩草一区二区三区日本| 91亚洲午夜在线| 亚洲人成啪啪网站| 亚洲国产精品久久久久婷婷软件| 成人免费精品视频| 国产永久免费观看| 女生影院久久| 福利片在线观看| 成人自拍网站| 五月婷婷综合激情| 草草地址线路①屁屁影院成人| 清纯唯美激情亚洲| 国产二区国产一区在线观看| 日韩最新中文字幕| 欧美精品在线观看| 老鸭窝一区二区久久精品| 九七影院97影院理论片久久| 天天爱天天做色综合| 欧美在线va视频| 国产一区二区三区四区在线观看| 日批视频在线播放| 人妻互换一区二区激情偷拍| 人人干视频在线| 国产精品高清亚洲| 日韩av黄色片| 国产精品国产一区| 精品在线网站观看| 福利精品在线| 在线亚洲色图| 国产清纯在线一区二区www| 麻豆视频在线观看| 精品香蕉一区二区三区| 中文字幕 久热精品 视频在线| 亚洲精品www.| 欧美性受xxxx狂喷水| 国产精品视频一区二区三区,| 国产成人亚洲综合| 免费在线稳定资源站| 精品久久久久久久中文字幕| 亚洲精品日韩综合观看成人91| 天天操天天射天天色| 国产一线天粉嫩馒头极品av| 国产精品传媒麻豆hd| a级高清视频欧美日韩| 97国产一区二区精品久久呦| 成人午夜免费影院| 日本高清不卡中文字幕| 91成人在线精品| 亚洲成av人在线观看| 亚洲乱码中文字幕| 夜夜嗨av一区二区三区中文字幕| 国产高潮在线观看| 欧美特黄一区| 调教在线观看| 精品女人久久久| 性少妇videosexfreexxx片| 麻豆传媒视频在线观看免费| 国产成人免费av| 国产欧美日韩视频一区二区| 日本不卡一二三区| 久久久久久久久久久久久久一区| 国产内射老熟女aaaa∵| 国产深夜精品福利| 91久久爱成人| www.久久热| 欧美精品免费观看二区| 欧美三日本三级少妇三99| jizz久久久久久| 亚洲欧美中日韩| 亚洲成人av一区| 天天操中文字幕| 亚洲午夜在线| 九九九九久久久久| 久国产精品韩国三级视频| 涩涩视频在线播放| 亚洲性生活大片| ijzzijzzij亚洲大全| 中文字幕第7页| 欧美成人免费高清视频| 在线观看国产精品淫| 99精品视频免费全部在线| 日日干天天草| 国产喷水在线观看| 国产在线二区| 国产一区二区三区黄| 国产精品成人免费一区久久羞羞| 日本裸体美女视频| 日韩精品成人免费观看视频| 中国黄色一级视频| 极品国产人妖chinesets亚洲人妖| 久热在线视频精品网站| 小小影院久久| 日本aⅴ免费视频一区二区三区| 亚洲天堂成人在线视频| 最新理论片影院| 久久久久久久一区二区三区| 精品视频在线一区二区| 青草影视电视剧免费播放在线观看| 久久婷五月综合| 久久激情视频久久| 国产一级一片免费播放| 中文字幕一区二区三区免费看| 影音先锋5566资源网| 国产一区二区三区久久| 综合亚洲色图| 亚洲黄色在线观看| 中文字幕人妻一区二区三区在线视频| 日本在线观看视频一区| 成人综合视频在线| gogogo高清免费观看在线视频| 57pao国产精品一区| 成人免费视频国产免费| 精品久久人人做人人爽| 日韩小视频在线播放| 欧美午夜精品| 日本精品久久电影| 久久精品国产一区二区三区不卡| 国产又黄又大又粗视频| 国产一区二区香蕉| 亚洲视频在线视频| 精品黑人一区二区三区国语馆| 欧美黄页免费| 久久久噜噜噜久久中文字免| 可以看av的网站久久看| 狠狠色噜噜狠狠狠| 国产成人无码精品亚洲| 国产精品一区免费在线| 欧美一级一区二区| 亚洲一区二区三区成人| 国产乱码精品一区二区三区中文| 欧美人成网站| 日批视频免费观看| 日韩精品久久久久久久玫瑰园| 欧美精品日韩少妇| 亚洲成a人片在线不卡一二三区| 日本欧美在线观看| 精品奇米国产一区二区三区| 成人激情av在线| www.日本在线播放| 欧美著名女优| 色噜噜狠狠成人中文综合| 久草在线在线| 浮力影院欧美三级日本三级| 情趣视频网站在线免费观看| 成年人在线视频免费观看| 国产欧美日韩精品高清二区综合区| 日本三级黄色大片| 国产野外作爱视频播放| 国产 日韩 欧美大片| 午夜精品影院在线观看| 欧美亚洲日本一区二区三区| 曰批又黄又爽免费视频| 欧美不卡一区二区| 久草资源在线视频| 日韩av在线网| 蜜桃视频成人| 三年中文高清在线观看第6集| 久久国产精品免费| 性感女国产在线| 欧美日本一道| 日韩免费一区二区三区| 亚洲欧洲自拍偷拍| 九九热播视频在线精品6| 一区二区欧美日韩视频| 粉嫩91精品久久久久久久99蜜桃| 亚洲欧美精品suv| 欧美日韩高清在线一区| 男人插女人下面视频| 四虎一区二区三区| 亚洲精品成人三区| 欧美h版在线观看| 国产黄网站在线观看| 一区二区三区视频| 免费高清在线视频一区·|