大家好,又見面了,我是你們的朋友全棧君。
Oracle觸發器的使用
觸發器是指存放在資料庫中,并被隐藏執行的存儲過程。在Oracle8i之前,隻允許基于表或視圖的DML操作(insert,update,delete)建立觸發器,在oracle8i之後,不僅支援DML操作,也允許基于系統事件(啟動資料庫,關閉資料庫,登入)和DDL操作建立觸發器。
一、觸發器簡介
觸發器是指隐含執行的存儲過程,它可以使用PL/SQL,java和C進行開發,當發生特定事件(例如:修改表、建立對象、登入資料庫)時,Oracle會自動執行觸發器的相應代碼。
觸發器由觸發事件、觸發條件和觸發操作三部分組成。
1、觸發事件
觸發事件是指觸發器被觸發的SQL、資料庫事件和使用者事件,在oracle8i之前,觸發事件隻能是DML操作,在oracle8i之後,不僅支援DML事件,而且還增加了其他事件,具體事件如下:
啟動和關閉例程
Oracle錯誤資訊
使用者登陸和關閉會話
特定表和視圖的DML操作
DDL語句
2、觸發條件(可選)
觸發條件是指使用when子句指定一個boolean表達式,當表達式傳回true時,則執行觸發器相應代碼,如果表達式傳回false或unknown,則不會執行觸發器相應代碼。
3、觸發操作
觸發操作是指包含SQL語句和其他執行代碼的PL/SQL塊,不僅可以使用PL/SQL開發,也可以使用java或c語言開發,當觸發條件為true時,會自動執行觸發操作的相應代碼。但是在編寫觸發器執行代碼時,需要注意一下限制:
觸發代碼大小不能超過32k,如果确實需要使用大量代碼建立觸發器,應該首先建立存儲過程,然後在觸發器中使用call語句調用存儲過程。
觸發器代碼隻能包括insert、update和delete語句,而不能包括DDL語句(create、drop、alert)和事務控制語句(commit,rollback和savepoint)。
二、建立DML觸發器
當建立DML觸發器時,需要指定觸發時機(before和after)、觸發事件(insert、select、update、delete)、表名、觸發類型、觸發條件以及觸發操作。
1、觸發時機
觸發時機是指觸發器的觸發時間,當指定before關鍵字時,表示在執行DML操作之前觸發觸發器;當指定after關鍵字時,表示在執行DML操作之後觸發觸發器。
2、觸發事件
觸發條件是指被引起觸發器執行的DML語句,即insert、update、delete操作。即可以使用單個觸發事件,也可以組合多個觸發事件。
3、表名
因為DML觸發器是針對特定表執行的,是以必須指定DML操作所對應的表名。
4、觸發類型
觸發類型用于指定當觸發事件發生後,需要執行幾次觸發操作,如果指定
相關文檔:
1) 選擇最有效率的表名順序(隻在基于規則的優化器中有效):
ORACLE的解析器按照從右到左的順序處理from子句中的表名,from子句中寫在最後的表(基礎表 driving table)将被最先處理,在from子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。如果有3個以上的表連接配接查詢, 那就需要選擇交叉表(intersection ……
1.在ORACLE中實作SELECT TOP N
由于ORACLE不支援SELECT TOP語句,是以在ORACLE中經常是用ORDER BY跟ROWNUM的組合來實作SELECT TOP N的查詢。
簡單地說,實作方法如下所示:
SELECT 列名1...列名n from
(SELECT 列 ……
資料字典dict總是屬于Oracle使用者sys的。
1、使用者:
select username from dba_users;
改密碼
alter user spgroup identified by spgtest;
2、表空間:
select * from dba_data_files;
select * from dba_tablespaces;//表空間
select tablespace_name,sum(bytes), sum ……
Oracle 分區表
Oracle提供了分區技術以支援VLDB(Very Large DataBase)。分區表通過對分區列的判斷,把分區列不同的記錄,放到不同的分區中。分區完全對應用透明。
Oracle的分區表可以包括多個分區,每個分區都是一個獨立的段(SEGMENT),可以存放到不同的表空間中。查詢時可以通過查詢表來通路各個分區中的資料� ……
Oracle中臨時表産生過量Redo的說明
最近,在Oracle9i中你用過臨時表嗎?
它是否給你帶來了性能提高?你注意過麼?
——————————————————————————–
好了言歸正傳.
我們知道臨時表在DML操作中可以減少redo的生成,進而在儲存中間結果集時可以帶來較大的性能提高.
可是,� ……
釋出者:全棧程式員棧長,轉載請注明出處:https://javaforall.cn/157502.html原文連結:https://javaforall.cn