大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 實例解析Oracle觸發器

實例解析Oracle觸發器

更新時間:2021-02-25 17:37:58 來源:動力節點 瀏覽1414次

觸發器的定義就是說某個條件成立的時候,觸發器里面所定義的語句就會被自動的執行。因此觸發器不需要人為的去調用,也不能調用。然后,觸發器的觸發條件其實在你定義的時候就已經設定好了。本文我們就來通過實例解析Oracle觸發器

我們先來看一下Oracle觸發器的基本語法:

create [or replace] tigger 觸發器名 觸發時間 觸發事件

on 表名

????[for each row]

begin

????pl/sql語句

End

下面我們來介紹觸發器每個部分的定義:

觸發器名:觸發器對象的名稱。由于觸發器是數據庫自動執行的,因此該名稱只是一個名稱,沒有實質的用途

觸發時間:指明觸發器何時執行,該值可取

before:表示在數據庫動作之前觸發器執行

after:表示在數據庫動作之后觸發器執行

觸發事件:指明哪些數據庫動作會觸發此觸發器

insert:數據庫插入會觸發此觸發器

update:數據庫修改會觸發此觸發器

delete:數據庫刪除會觸發此觸發器

表 名:數據庫觸發器所在的表

for each row:對表的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。

通過上面的Oracle觸發器的基本語法,我們下面給出幾個具體的Oracle觸發器實例:

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

create or replace trigger auth_secure before insert or update or DELETE

on tb_emp

begin

??IF(to_char(sysdate,'DY')='星期日') THEN

????RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp');

??END IF;

END;

2、使用觸發器實現序號自增

創建一個測試表:

create table tab_user(

??id number(11) primary key,

??username varchar(50),

??password varchar(50)

);

創建一個序列:

create sequence my_seq increment by 1 start with 1 nomaxvalue nocycle cache 20;

創建一個觸發器:

CREATE OR REPLACE TRIGGER MY_TGR

?BEFORE INSERT ON TAB_USER

?FOR EACH ROW--對表的每一行觸發器執行一次

DECLARE

?NEXT_ID NUMBER;

BEGIN

?SELECT MY_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL;

?:NEW.ID := NEXT_ID; --:NEW表示新插入的那條記錄

END;

向表插入數據:

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;

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

--創建測試表

CREATE TABLE test(

??t_id ?NUMBER(4),

??t_name VARCHAR2(20),

??t_age NUMBER(2),

??t_sex CHAR

);

--創建記錄測試表

CREATE TABLE test_log(

??l_user ?VARCHAR2(15),

??l_type ?VARCHAR2(15),

??l_date ?VARCHAR2(30)

);

創建觸發器:

--創建觸發器

CREATE OR REPLACE TRIGGER TEST_TRIGGER

?AFTER DELETE OR INSERT OR UPDATE ON TEST

DECLARE

?V_TYPE TEST_LOG.L_TYPE%TYPE;

BEGIN

?IF INSERTING THEN

??--INSERT觸發

??V_TYPE := 'INSERT';

??DBMS_OUTPUT.PUT_LINE('記錄已經成功插入,并已記錄到日志');

?ELSIF UPDATING THEN

??--UPDATE觸發

??V_TYPE := 'UPDATE';

??DBMS_OUTPUT.PUT_LINE('記錄已經成功更新,并已記錄到日志');

?ELSIF DELETING THEN

??--DELETE觸發

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

/

--下面我們來分別執行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觸發器的實例能夠幫助我們掌握Oracle觸發器的基本用法,我們想要深入學習Oracle觸發器的小伙伴可以觀看本站的Oracle教程,學習各種Oracle相關的知識點,提升自己對Oracle知識體系的掌握能力。

 

 

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 天天躁夜夜躁很很躁麻豆 | 波多野结衣在线观看3人 | 91国内视频| 男人的天堂久久香蕉国产 | 国产精品三区四区 | 亚洲精品一区二区三区网址 | 奇米影视第四色首页 | 色黄网站成年女人色毛片 | 美女一级毛片视频 | 日日干夜夜操视频 | 成人伊人网 | 久久精品免看国产 | 中文字幕日韩亚洲 | 青青草久热精品视频在线观看 | a毛片全部免费播放 | 在线视频 二区 | 日本猛妇色xxxxx在线 | 国产精品播放 | 国产二区三区毛片 | 天天操天天舔天天干 | 三级aaa黄特色 | 亚洲一区二区在线成人 | 永久久久免费浮力影院 | 99爱视频在线观看 | 亚洲日韩视频 | 亚洲精品欧美日本中文字幕 | 国产好大好爽久久久久久久 | 久久两性视频 | 日本私人影院 | 亚洲精品一区二区三区国产 | 青青青青久久精品国产一百度 | 日韩精品一区二区三区中文 | 国产欧美成人一区二区三区 | 亚洲在线一区 | 91亚色 | 在线观看中文字幕一区 | 国产精品久久久尹人香蕉 | 毛片免费观看 | 成熟女人50岁一级毛片不卡 | 色爱区综合激月婷婷激情五月 | 欧美孕妇乱大交xxxxx |