天天看點

oracle怎麼使用觸發器,Oracle觸發器的使用[通俗易懂]

大家好,又見面了,我是你們的朋友全棧君。

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