您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關oracle觸發器是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
Oracle觸發器是什么呢?
首先我們來了解一下觸發器是什么,觸發器在觸發一定事件的時候隱式執行的一段sql語句,觸發器不能接收參數。Oracle觸發器則是觸發Oracle數據庫中對數據庫進行insert、update、delete操作或對視圖進行類似的操作,還有一些系統的事件,比如數據庫的關閉或開啟。
觸發器的分類有哪些?
(1)、數據操縱語言(DML)觸發器:創建在表上,有DML時間來觸發的觸發器;
(2)、替代(insteadof)觸發器:創建在視圖上,用來替換對視圖進行添加、修改和刪除操作。
(3)、數據定義語言(DDL)觸發器:定義在模式上,觸發事件是對數據庫對象的創建和修改操作。
(4)、數據庫系統觸發器:定義在整個數據庫上,觸發的時間是數據庫的操作,比如數據庫的啟動和關閉。
觸發器的組成部分有哪些?
(1)、觸發的事件:即在何種情況下觸發trigger,例如:insert、update、delete。
(2)、觸發的時間:即該trigger是在觸發事件之前(before)還是在觸發事件之后(after),也是觸發的事件和該trigger主體的先后順序。
(3)、觸發器本身:即觸發器在觸發事件的時候要執行的操作,例如:pl/sql塊。
(4)、觸發的頻率:說明該觸發器內定義的動作被執行的次數。即語句級觸發器和行級觸發器。語句級觸發器是指當某個事件發生時,該觸發器只執行一次。而行級觸發器,在某個事件發生時,對受到該操作影響的每一行數據,都會單獨執行一次觸發器。
Oracle觸發器實例:
--創建表
--員工表
CREATETABLEemp(
emp_IDNUMBER(10)PRIMARYKEY,
emp_nameVARCHAR2(20)NOTNULL,
emp_sexVARCHAR2(10),
emp_addressVARCHAR2(15)
);
--日志表
CREATETABLElogs(
LOG_IDNUMBER(10)PRIMARYKEY,
LOG_TABLEVARCHAR2(10)NOTNULL,
LOG_DMLVARCHAR2(10),
LOG_KEY_IDNUMBER(10),
LOG_DATEDATE,
LOG_USERVARCHAR2(15)
);
--創建序列
CREATESEQUENCElogs_id_squINCREMENTBY1
STARTWITH1MAXVALUE9999999NOCYCLENOCACHE;
CREATESEQUENCEemp_id_squINCREMENTBY1
STARTWITH1MAXVALUE9999999NOCYCLENOCACHE;
觸發器的限制有哪些?
(1)、createtrigger語句的字符長度不能超多32kb;
(2)、觸發器體內的select語句只能為select.....into.....結構,或者為定義游標所使用的select語句;
(3)、觸發器中不能使用數據庫事務控制語句,如:commit、rollback、savepoint語句;
(4)、由觸發器調用的過程或函數也不能使用數據庫事務控制語句;
(5)、觸發器中不能使用lang、langrow類型;
(6)、觸發器可以參照lob類型類的列值,但不能通過:new來修改lob列中的值;
(7)、觸發器所涉及的表收到表約束的限制
以上就是oracle觸發器是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。