ORACLE PL/SQL 觸發(fā)器編程篇介紹
兩種功能:完成由數(shù)據(jù)庫的完整性約束難以完成的復(fù)雜業(yè)務(wù)規(guī)則的約束;監(jiān)視數(shù)據(jù)庫的各種操作,實(shí)現(xiàn)審計(jì)功能。
觸發(fā)器分為:DML觸發(fā)器(對(duì)表或視圖執(zhí)行DML操作時(shí)觸發(fā)),INSTEAD OF觸發(fā)器(只定義在視圖上,替代實(shí)際的操作語句),系統(tǒng)觸發(fā)器(對(duì)數(shù)據(jù)庫系統(tǒng)進(jìn)行操作時(shí)觸發(fā),如DDL語句、啟動(dòng)或關(guān)閉數(shù)據(jù)庫等)
觸發(fā)事件: 上述觸發(fā)器中括號(hào)內(nèi)容都是觸發(fā)事件。
觸發(fā)條件: WHEN子句
觸發(fā)對(duì)象:包括表、視圖、模式、數(shù)據(jù)庫。
觸發(fā)操作:觸發(fā)器自動(dòng)執(zhí)行的程序。
觸發(fā)時(shí)機(jī):觸發(fā)器相對(duì)操作執(zhí)行的時(shí)間,BEFORE/AFTER
條件謂詞:INSERTING(觸發(fā)器事件為INSERT時(shí)為真),UPDATING,DELETING
觸發(fā)子類型:行觸發(fā)和語句觸發(fā),觸發(fā)中的new和old表。
2.創(chuàng)建觸發(fā)器
CREATE OR REPLACE TRIGGER<觸發(fā)器名>
觸發(fā)條件
觸發(fā)體
CREATE TRIGGER my_trigger --定義一個(gè)觸發(fā)器my—trigger
BEFORE INSERT or UPDATE of TID,TNAME on TEACHERS
FOR each row
WHEN(new.TNAME='David') --這一部分是觸發(fā)條件
DECLARE --下面這一部分是觸發(fā)體
teacher_id TEACHERS.TID%TYPE;
INSERT_EXIST_TEACHER EXCEPTION;
BEGIN
SELECT TID INTO teacher_id
FROM TEACHERS
WHERE TNAME=new.TNAME;
RAISE INSERT_EXIST_TEACHER;
EXCEPTION --異常處理也可用在這里
WHEN INSERT_EXIST_TEACHER THEN
INSERT INTO ERROR(TID,ERR)
VALUES(teacher_id,'the teacher already exists!');
END my triqqer;
3.執(zhí)行觸發(fā)器
自動(dòng)執(zhí)行
CREATE TRIGGER my_trigger1
AFTER INSERT or UPDATE or DELETE on TEACHERS
FOR each row;
DECLARE
info CHAR(10);
BEGIN
IF inserting THEN --如果進(jìn)行插入操作
info:='INSERT';
ELSIF updating THEN --如果進(jìn)行修改操作
info:='Update';
ELSE--如果進(jìn)行刪除操作
info:='Delete';
END IF;
INSERT INTO SQL_INFO VALUES(info); --記錄這次操作信息
END my_trigger1;
4.刪除觸發(fā)器
DROP TRIGGER my_trigger;
相關(guān)文章
Oracle數(shù)據(jù)庫執(zhí)行慢問題排查詳細(xì)過程
這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫執(zhí)行慢問題排查的詳細(xì)過程,在企業(yè)級(jí)應(yīng)用中,數(shù)據(jù)庫的穩(wěn)定性和性能是至關(guān)重要的,文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下2023-07-07Oracle中pivot函數(shù)圖文實(shí)例詳解
pivot操作是一種數(shù)據(jù)處理方法,可以將一個(gè)表中的行數(shù)據(jù)轉(zhuǎn)換為列數(shù)據(jù),這種轉(zhuǎn)換對(duì)于表格數(shù)據(jù)的分析和展示非常有用,下面這篇文章主要給大家介紹了關(guān)于Oracle中pivot函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-05-05oracle 動(dòng)態(tài)AdvStringGrid完美示例 (AdvStringGrid使用技巧/Cells)
本方法實(shí)現(xiàn)用常量和常量數(shù)組完美創(chuàng)建和控制動(dòng)態(tài)TAdvStringGrid。2009-06-06Oracle 數(shù)據(jù)庫中創(chuàng)建合理的數(shù)據(jù)庫索引
在Oracle數(shù)據(jù)庫中,創(chuàng)建索引雖然比較簡(jiǎn)單。但是要合理的創(chuàng)建索引則比較困難了。2009-06-06oracle實(shí)現(xiàn)將字段按逗號(hào)拼接/按逗號(hào)分為多行實(shí)例代碼
這篇文章主要給大家介紹了關(guān)于oracle實(shí)現(xiàn)將字段按逗號(hào)拼接/按逗號(hào)分為多行的相關(guān)資料,因?yàn)樽罱?xiàng)目表里的某個(gè)字段存儲(chǔ)的值是以逗號(hào)分隔開來的,所以這里給大家總結(jié)下,需要的朋友可以參考下2023-07-07CMD操作oracle數(shù)據(jù)導(dǎo)庫過程圖解
這篇文章主要介紹了CMD操作oracle數(shù)據(jù)導(dǎo)庫過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07oracle 發(fā)送郵件 實(shí)現(xiàn)方法
oracle 發(fā)送郵件 實(shí)現(xiàn)方法2009-05-05oracle下巧用bulk collect實(shí)現(xiàn)cursor批量fetch的sql語句
oracle下巧用bulk collect實(shí)現(xiàn)cursor批量fetch的sql語句,使用oracel的朋友可以試試了2008-03-03Oracle動(dòng)態(tài)視圖v$active_session_history實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了Oracle動(dòng)態(tài)視圖v$active_session_history實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03