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

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

Oracle觸發(fā)器用法實例詳解

2024-08-29 13:58:54
字體:
來源:轉載
供稿:網(wǎng)友
這篇文章主要介紹了Oracle觸發(fā)器用法,結合實例形式詳細分析了Oracle觸發(fā)器的概念,功能,語法及相關使用技巧,需要的朋友可以參考下
 

本文實例講述了Oracle觸發(fā)器用法。分享給大家供大家參考,具體如下:

一、觸發(fā)器簡介

觸發(fā)器的定義就是說某個條件成立的時候,觸發(fā)器里面所定義的語句就會被自動的執(zhí)行。因此觸發(fā)器不需要人為的去調用,也不能調用。然后,觸發(fā)器的觸發(fā)條件其實在你定義的時候就已經設定好了。這里面需要說明一下,觸發(fā)器可以分為語句級觸發(fā)器和行級觸發(fā)器。詳細的介紹可以參考網(wǎng)上的資料,簡單的說就是語句級的觸發(fā)器可以在某些語句執(zhí)行前或執(zhí)行后被觸發(fā)。而行級觸發(fā)器則是在定義的了觸發(fā)的表中的行數(shù)據(jù)改變時就會被觸發(fā)一次。

具體舉例:

1、 在一個表中定義的語句級的觸發(fā)器,當這個表被刪除時,程序就會自動執(zhí)行觸發(fā)器里面定義的操作過程。這個就是刪除表的操作就是觸發(fā)器執(zhí)行的條件了。
2、 在一個表中定義了行級的觸發(fā)器,那當這個表中一行數(shù)據(jù)發(fā)生變化的時候,比如刪除了一行記錄,那觸發(fā)器也會被自動執(zhí)行了。

二、觸發(fā)器語法

觸發(fā)器的語法:

create [or replace] tigger 觸發(fā)器名 觸發(fā)時間 觸發(fā)事件on 表名[for each row]begin pl/sql語句end

其中:

觸發(fā)器名:觸發(fā)器對象的名稱。由于觸發(fā)器是數(shù)據(jù)庫自動執(zhí)行的,因此該名稱只是一個名稱,沒有實質的用途。
觸發(fā)時間:指明觸發(fā)器何時執(zhí)行,該值可?。?br /> before:表示在數(shù)據(jù)庫動作之前觸發(fā)器執(zhí)行;
after:表示在數(shù)據(jù)庫動作之后觸發(fā)器執(zhí)行。
觸發(fā)事件:指明哪些數(shù)據(jù)庫動作會觸發(fā)此觸發(fā)器:
insert:數(shù)據(jù)庫插入會觸發(fā)此觸發(fā)器;
update:數(shù)據(jù)庫修改會觸發(fā)此觸發(fā)器;
delete:數(shù)據(jù)庫刪除會觸發(fā)此觸發(fā)器。
表 名:數(shù)據(jù)庫觸發(fā)器所在的表。
for each row:對表的每一行觸發(fā)器執(zhí)行一次。如果沒有這一選項,則只對整個表執(zhí)行一次。

觸發(fā)器能實現(xiàn)如下功能:

功能

1、 允許/限制對表的修改
2、 自動生成派生列,比如自增字段
3、 強制數(shù)據(jù)一致性
4、 提供審計和日志記錄
5、 防止無效的事務處理
6、 啟用復雜的業(yè)務邏輯

舉例

1)、下面的觸發(fā)器在更新表tb_emp之前觸發(fā),目的是不允許在周末修改表:

create or replace trigger auth_secure before insert or update or DELETEon tb_empbegin  IF(to_char(sysdate,'DY')='星期日') THEN    RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp');  END IF;END;/

2)、使用觸發(fā)器實現(xiàn)序號自增

創(chuàng)建一個測試表:

create table tab_user(  id number(11) primary key,  username varchar(50),  password varchar(50));

創(chuàng)建一個序列:

復制代碼代碼如下:
create sequence my_seq increment by 1 start with 1 nomaxvalue nocycle cache 20;

 

創(chuàng)建一個觸發(fā)器:

CREATE OR REPLACE TRIGGER MY_TGR BEFORE INSERT ON TAB_USER FOR EACH ROW--對表的每一行觸發(fā)器執(zhí)行一次DECLARE NEXT_ID NUMBER;BEGIN SELECT MY_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL; :NEW.ID := NEXT_ID; --:NEW表示新插入的那條記錄END;

向表插入數(shù)據(jù):

insert into tab_user(username,password) values('admin','admin');insert into tab_user(username,password) values('fgz','fgz');insert into tab_user(username,password) values('test','test');COMMIT;

查詢表結果:SELECT * FROM TAB_USER;

Oracle,觸發(fā)器

3)、當用戶對test表執(zhí)行DML語句時,將相關信息記錄到日志表

--創(chuàng)建測試表CREATE TABLE test(  t_id  NUMBER(4),  t_name VARCHAR2(20),  t_age NUMBER(2),  t_sex CHAR);--創(chuàng)建記錄測試表CREATE TABLE test_log(  l_user  VARCHAR2(15),  l_type  VARCHAR2(15),  l_date  VARCHAR2(30));

創(chuàng)建觸發(fā)器:

--創(chuàng)建觸發(fā)器CREATE OR REPLACE TRIGGER TEST_TRIGGER AFTER DELETE OR INSERT OR UPDATE ON TESTDECLARE V_TYPE TEST_LOG.L_TYPE%TYPE;BEGIN IF INSERTING THEN  --INSERT觸發(fā)  V_TYPE := 'INSERT';  DBMS_OUTPUT.PUT_LINE('記錄已經成功插入,并已記錄到日志'); ELSIF UPDATING THEN  --UPDATE觸發(fā)  V_TYPE := 'UPDATE';  DBMS_OUTPUT.PUT_LINE('記錄已經成功更新,并已記錄到日志'); ELSIF DELETING THEN  --DELETE觸發(fā)  V_TYPE := 'DELETE';  DBMS_OUTPUT.PUT_LINE('記錄已經成功刪除,并已記錄到日志'); END IF; INSERT INTO TEST_LOG VALUES  (USER, V_TYPE, TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss')); --USER表示當前用戶名END;/--下面我們來分別執(zhí)行DML語句INSERT INTO test VALUES(101,'zhao',22,'M');UPDATE test SET t_age = 30 WHERE t_id = 101;DELETE test WHERE t_id = 101;--然后查看效果SELECT * FROM test;SELECT * FROM test_log;

運行結果如下:

Oracle,觸發(fā)器

3)、創(chuàng)建觸發(fā)器,它將映射emp表中每個部門的總人數(shù)和總工資

--創(chuàng)建映射表CREATE TABLE dept_sal ASSELECT deptno, COUNT(empno) total_emp, SUM(sal) total_salFROM scott.empGROUP BY deptno;--創(chuàng)建觸發(fā)器CREATE OR REPLACE TRIGGER EMP_INFO AFTER INSERT OR UPDATE OR DELETE ON scott.EMPDECLARE CURSOR CUR_EMP IS  SELECT DEPTNO, COUNT(EMPNO) AS TOTAL_EMP, SUM(SAL) AS TOTAL_SAL FROM scott.EMP GROUP BY DEPTNO;BEGIN DELETE DEPT_SAL; --觸發(fā)時首先刪除映射表信息 FOR V_EMP IN CUR_EMP LOOP  --DBMS_OUTPUT.PUT_LINE(v_emp.deptno || v_emp.total_emp || v_emp.total_sal);  --插入數(shù)據(jù)  INSERT INTO DEPT_SAL  VALUES   (V_EMP.DEPTNO, V_EMP.TOTAL_EMP, V_EMP.TOTAL_SAL); END LOOP;END;--對emp表進行DML操作INSERT INTO emp(empno,deptno,sal) VALUES('123','10',10000);SELECT * FROM dept_sal;DELETE EMP WHERE empno=123;SELECT * FROM dept_sal;

顯示結果如下:

Oracle,觸發(fā)器

4)、創(chuàng)建觸發(fā)器,用來記錄表的刪除數(shù)據(jù)

--創(chuàng)建表CREATE TABLE employee(  id  VARCHAR2(4) NOT NULL,  name VARCHAR2(15) NOT NULL,  age NUMBER(2)  NOT NULL,  sex CHAR NOT NULL);--插入數(shù)據(jù)INSERT INTO employee VALUES('e101','zhao',23,'M');INSERT INTO employee VALUES('e102','jian',21,'F');--創(chuàng)建記錄表(包含數(shù)據(jù)記錄)CREATE TABLE old_employee AS SELECT * FROM employee;--創(chuàng)建觸發(fā)器CREATE OR REPLACE TRIGGER TIG_OLD_EMP AFTER DELETE ON EMPLOYEE FOR EACH ROW --語句級觸發(fā),即每一行觸發(fā)一次BEGIN INSERT INTO OLD_EMPLOYEE VALUES (:OLD.ID, :OLD.NAME, :OLD.AGE, :OLD.SEX); --:old代表舊值END;/--下面進行測試DELETE employee;SELECT * FROM old_employee;

5)、創(chuàng)建觸發(fā)器,利用視圖插入數(shù)據(jù)

--創(chuàng)建表CREATE TABLE tab1 (tid NUMBER(4) PRIMARY KEY,tname VARCHAR2(20),tage NUMBER(2));CREATE TABLE tab2 (tid NUMBER(4),ttel VARCHAR2(15),tadr VARCHAR2(30));--插入數(shù)據(jù)INSERT INTO tab1 VALUES(101,'zhao',22);INSERT INTO tab1 VALUES(102,'yang',20);INSERT INTO tab2 VALUES(101,'13761512841','AnHuiSuZhou');INSERT INTO tab2 VALUES(102,'13563258514','AnHuiSuZhou');--創(chuàng)建視圖連接兩張表CREATE OR REPLACE VIEW tab_view AS SELECT tab1.tid,tname,ttel,tadr FROM tab1,tab2 WHERE tab1.tid = tab2.tid;--創(chuàng)建觸發(fā)器CREATE OR REPLACE TRIGGER TAB_TRIGGER INSTEAD OF INSERT ON TAB_VIEWBEGIN INSERT INTO TAB1 (TID, TNAME) VALUES (:NEW.TID, :NEW.TNAME); INSERT INTO TAB2 (TTEL, TADR) VALUES (:NEW.TTEL, :NEW.TADR);END;/--現(xiàn)在就可以利用視圖插入數(shù)據(jù)INSERT INTO tab_view VALUES(106,'ljq','13886681288','beijing');--查詢SELECT * FROM tab_view;SELECT * FROM tab1;SELECT * FROM tab2;

6)、創(chuàng)建觸發(fā)器,比較emp表中更新的工資

--創(chuàng)建觸發(fā)器set serveroutput on;CREATE OR REPLACE TRIGGER SAL_EMP BEFORE UPDATE ON EMP FOR EACH ROWBEGIN IF :OLD.SAL > :NEW.SAL THEN  DBMS_OUTPUT.PUT_LINE('工資減少'); ELSIF :OLD.SAL < :NEW.SAL THEN  DBMS_OUTPUT.PUT_LINE('工資增加'); ELSE  DBMS_OUTPUT.PUT_LINE('工資未作任何變動'); END IF; DBMS_OUTPUT.PUT_LINE('更新前工資 :' || :OLD.SAL); DBMS_OUTPUT.PUT_LINE('更新后工資 :' || :NEW.SAL);END;/--執(zhí)行UPDATE查看效果UPDATE emp SET sal = 3000 WHERE empno = '7788';

運行結果如下:

Oracle,觸發(fā)器

7)、創(chuàng)建觸發(fā)器,將操作CREATE、DROP存儲在log_info表

--創(chuàng)建表CREATE TABLE log_info(  manager_user VARCHAR2(15),  manager_date VARCHAR2(15),  manager_type VARCHAR2(15),  obj_name   VARCHAR2(15),  obj_type   VARCHAR2(15));--創(chuàng)建觸發(fā)器set serveroutput on;CREATE OR REPLACE TRIGGER TRIG_LOG_INFO AFTER CREATE OR DROP ON SCHEMABEGIN INSERT INTO LOG_INFO VALUES  (USER,   SYSDATE,   SYS.DICTIONARY_OBJ_NAME,   SYS.DICTIONARY_OBJ_OWNER,   SYS.DICTIONARY_OBJ_TYPE);END;/--測試語句CREATE TABLE a(id NUMBER);CREATE TYPE aa AS OBJECT(id NUMBER);DROP TABLE a;DROP TYPE aa;--查看效果SELECT * FROM log_info;--相關數(shù)據(jù)字典-----------------------------------------------------SELECT * FROM USER_TRIGGERS;--必須以DBA身份登陸才能使用此數(shù)據(jù)字典SELECT * FROM ALL_TRIGGERS;SELECT * FROM DBA_TRIGGERS;--啟用和禁用ALTER TRIGGER trigger_name DISABLE;ALTER TRIGGER trigger_name ENABLE;

希望本文所述對大家Oracle數(shù)據(jù)庫程序設計有所幫助。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
av漫画网站| 米奇777四色精品人人爽| 欧美丝袜丝交足nylons172| 蜜桃久久久久久久| av综合网址| 欧美制服第一页| 北条麻妃在线视频| 精品毛片久久久久久| 黄网址在线观看| 永久免费av在线| 懂色av一区二区三区四区五区| 5566成人精品视频免费| 色综合色狠狠天天综合色| 中文字幕日韩一区| 欧美老少做受xxxx高潮| 26uuu成人| 亚洲国产福利在线| 成人av激情人伦小说| 九七影院理论片| 中文字幕第2页| 亚洲成人精品久久| 初尝黑人巨炮波多野结衣电影| 色视频在线看| 亚洲天堂一区二区三区四区| 深夜精品寂寞黄网站在线观看| 久久精品影视大全| 偷窥自拍亚洲色图| 色屁屁草草影院ccyycom| 精品国产免费人成电影在线观看四季| 成人在线免费高清视频| 欧美年轻男男videosbes| 999在线观看免费大全电视剧| 国产精品传媒毛片三区| 欧美jizz| 成人精品国产一区二区4080| 日本不卡高清视频| 欧美另类videos死尸| 午夜影院在线视频| 男人天堂网页| 狠狠躁少妇一区二区三区| 成人高清av在线| 日韩精品一区二区三区不卡| 制服.丝袜.亚洲.另类.中文| 性久久久久久久久| 国产91精品不卡视频| 9191在线| 欧美性色综合| 国产又粗又大又爽视频| 国产大片在线免费观看| 国产欧美va欧美va香蕉在线| 日韩成人精品一区二区三区| 免费中文字幕日韩欧美| proumb性欧美在线观看| 五月天亚洲精品| 国产成人三级在线观看| 国产精品50页| 欧美久久久久久久久久久| 中文人妻熟女乱又乱精品| 视频一区视频二区国产精品| 视频一区二区三区不卡| 欧美亚洲色图校园春色| 56国语精品自产拍在线观看| 国产精品99久久久久久成人| 91av影院| 日本中文字幕在线视频观看| 亚洲无线视频| 香蕉久久视频| 久久久久久国产视频| 精品国产制服丝袜高跟| 国产精品18在线| 日韩写真福利视频在线| 91亚洲大成网污www| 538在线观看| 91影院在线播放| 国产激情精品久久久第一区二区| www.eeuss影院| 一区二区三区日韩在线观看| 美女与牲口做爰视频在线观看| 国产狼人综合免费视频| 国产精品国产三级国产普通话蜜臀| 亚洲free性xxxx护士白浆| 嫩模私拍啪啪| 日韩少妇裸体做爰视频| 亚洲欧美在线一区| 日本在线三级| 成人av影音| 欧美xxxx三人交性视频| 91传媒视频免费| 在线视频自拍| 91丨国产丨九色丨pron| 最新国产在线精品91尤物| 欧美久久久精品| 国产激情91久久精品导航| 国产色综合视频| 国产精品白丝在线| yes4444视频在线观看| 久久亚洲国产成人精品无码区| 色综合久久久久综合体| 亚洲第一天堂网| 一区二区三区成人在线视频| 成人软件在线观看| 三级做a全过程在线观看| 青娱乐av在线| 色婷婷狠狠18禁久久| 24小时成人在线视频| 国产玉足榨精视频在线观看| 日韩av手机在线观看| 国产精品爽爽ⅴa在线观看| a√在线视频| 欧美激情免费视频| 日本精品一区二区三区在线| 精品人妻一区二区三区浪潮在线| 国产精品815.cc红桃| 韩国av免费在线| 欧美一区二区三区小说| 欧美不卡一区二区| 欧美一区二区视频97| 台湾佬成人网| 538国产精品一区二区免费视频| 久久精品国产成人| 中文天堂最新版本在线观看| 国产一级做a爱片久久毛片a| 国产精品久久久久影院亚瑟| 自拍偷在线精品自拍偷无码专区| 欧美与亚洲与日本直播| 国产成人在线视频观看| xxxxxhd亚洲人hd| 欧美视频在线免费看| 最新日韩av| 亚洲激情自拍偷拍| 日本色七七影院| 日本在线高清视频一区| 亚洲无av在线中文字幕| 欧美极品少妇与黑人| 男操女免费网站| 国产欧美在线视频| 奇米精品一区二区三区在线观看一| 欧美一区二区三区久久久| 精品国产综合区久久久久久| 国产成人精品免费久久久久| 在线观看日韩专区| 色的视频在线观看免费播放| av在线收看| 99精品国产一区二区| 亚洲一区二区成人| 欧美一区亚洲一区| 国产wwww| 久草在线资源视频| 成年人视频在线| 中文资源在线播放| 欧美午夜精品久久久久久人妖| 久久精品人人做人人爽电影| 成人黄色一区二区| 精品一区二区三区的国产在线播放| 夜夜嗨av一区二区三区四区| 欧美三级日本三级少妇99| 老女人av在线| 大胆国模一区二区三区| a级网站在线观看| 日韩在线播放一区二区| 4438x成人网全国最大| 老熟女高潮一区二区三区| 真实的国产乱xxxx在线91| 日本人妻熟妇久久久久久| xxxx另类黑人| 韩国成人在线| 日韩午夜激情免费电影| 亚洲视频免费播放| 亚洲激情第一区| 亚洲大胆美女视频| 三上悠亚影音先锋| 国产精品亚洲综合天堂夜夜| 91色porny在线视频| 国产在线欧美在线| 国产欧美三级电影| 亚洲国产黄色片| 欧美午夜影院一区| 狠狠操五月天| 亚洲成人综合在线| 久久精品国产精品亚洲| 国产一区二区三区中文字幕| 亚洲丝袜啪啪| 免费观看国产视频在线| 婷婷久久综合| 免费观看在线一区二区三区| 久久er视频| 日本熟妇毛茸茸丰满| 久久精品国产成人| 久久99久久人婷婷精品综合| 91在线视频播放地址| 最新国产精品自拍| 欧洲精品一区二区| 日本夜夜草视频网站| a免费在线观看| 国产在线播放观看| 日本在线精品视频| 亚洲第一色中文字幕| 成 人片 黄 色 大 片| 蜜桃久久av一区| 亚洲亚洲精品三区日韩精品在线视频| 蜜桃视频日韩| 久久99国产精品久久| 亚洲精品性视频| 看全色黄大色黄大片免责看的| 国产欧美 在线欧美| 久久久www| 亚洲国产专区| 成人av蜜桃| 91传媒在线免费观看| 丁香视频五月| 久久国际精品| 精品人妻一区二区三区换脸明星| 中文字幕日本在线| 一本色道综合亚洲| 精品一区电影国产| 无码国精品一区二区免费蜜桃| 男女羞羞网站| 一区免费视频| 在线一区二区三区做爰视频网站| 777欧美精品| 爽好多水快深点欧美视频| 日韩中文字幕组| 久久精品理论片| 色婷婷av777| 116极品美女视频在线观看| 国产精品99精品无码视亚| 96久久久久久| 精品国产乱码久久久久| 成人免费在线观看入口| 亚洲成人在线视频网站| 亚洲一区二区三区爽爽爽爽爽| 国产一区二区三区影视| 国产一区二区三区四区老人| 先锋影音二区| 少妇人妻无码专区视频| 三上悠亚在线一区| 成人一级免费视频| 国精产品一区一区三区视频| 亚洲最大成人网4388xx| 国产黄色精品| 欧美午夜视频网站| 男人的天堂va免费视频| 久久亚洲免费| 性视频在线播放| 美女精品在线观看| 日本韩国一区二区三区视频| 一区精品久久| 精品国产伦一区二区三区观看方式| 日本最新一区二区三区视频观看| 日韩人妻无码精品久久久不卡| 色噜噜狠狠一区二区三区果冻| 婷婷亚洲综合| 国产污污视频在线观看| 欧美一区在线直播| 成人h动漫精品| 国产三级午夜理伦三级| 国精产品久拍自产在线网站| 日韩精品一区二区三区免费视频| 一本久道高清无码视频| 亚洲色婷婷一区二区三区| www.污网站| 亚洲一区二区三区精品动漫| 中文字幕一区二区在线视频| 日本一区二区三区四区视频| 日本亚洲最大的色成网站www| 国产成人av福利| 女囚岛在线观看| 免费看成年人视频| www成人免费视频| 日韩av一卡| 2222www色视频在线观看| 91sao在线观看国产| 一级毛片aaaaaa免费看| 四虎永久免费影院| 亚洲日本电影在线| 激情综合网五月激情| 亚洲国产视频a| 国产一国产二国产三| 99精品网站| 国产福利视频一区二区| 精品久久久久久久久久久久久久久久久| 日本高清不卡aⅴ免费网站| 久久久久久久久久久91| 亚洲国产精品一区二区www在线| 少妇高潮一区二区三区99| 91成人看片| 日韩欧美国产视频| 国内揄拍国内精品久久| 国产精品黑丝在线播放| 美女诱惑一区| 激情都市一区二区| 欧美三级情趣内衣| 中文字幕免费一区二区| 亚洲一区影音先锋| 亚洲国产成人一区二区三区| 91精品国产综合久久久蜜臀图片| 美女免费黄色| 日韩精品一级二级| 性久久久久久久久久| 亚洲乱码国产乱码精品精软件| 97国产精品久久| 欧美亚洲色图校园春色| 亚洲h视频在线观看| 毛片一区二区| 性生活视频软件| 中文字幕在线字幕中文| 欧美成人aaa| 国产图片综合| 亚洲国产成人在人网站天堂| 久久久精品国产免费观看同学| 成人免费观看视频大全| 久久亚洲春色中文字幕久久久| 色欲av无码一区二区人妻| 中文字幕成人一区| 黄色免费网站视频| 日韩成人高清| 日韩欧美一级精品久久| 超碰97av在线| www.成人三级视频| 中文字幕高清在线观看| 一本大道久久加勒比香蕉| 中文字幕乱码人妻二区三区| 一级黄色片网站| 国产在线资源一区| 777奇米888色狠狠俺也去| 91精品黄色片免费大全| 在线观看岛国av| 欧美乱熟臀69xxxxxx|