Oracle學習(十五) 觸發器

來源:互聯網
上載者:User

觸發器可實現表間資料的一致性和完整性。當一個基表被修改時,相應的觸發器會自動執行。對錶數 據的操作有插入、修改和刪除,相應的維護資料的觸發器也大致有insert、update和delete三種。

觸發器的類型有三種:

(1)DML觸發器:在對錶進行DML操作的時候觸發。

(2)替代觸發器:由於在Oracle中不能直接對有兩個以上表建立的視圖進行DML操作,所以給出了替 代觸發器,它是Oracle專門為進行視圖操作的一種處理方法。

(3)系統觸發器:它可以在Oracle資料庫系統的事件中進行觸發,如資料庫的開啟和關閉。

觸發器中的關鍵詞:

觸發器中有兩個非常重要的關鍵詞,一個是old,一個是new,old用於修飾操作完成前的值,new用於 修飾完成後的值,可以代表一行。此外,只有行級的觸發器才能使用這兩個關鍵字。

一、利用SQL語句建立觸發器

1、利用SQL建立觸發器的文法格式:

create [or replace] trigger [schema.]trigger_name  {before | after | instead of}  {delete [or insert][or update [of column,...n]]}  on [schema.]table_name | view_name  [for each row [when(condition)]]  sql_statement[,...n]

其中,before:觸發器在操作前執行;after:觸發器在操作後執行;instead of:指定建立替代觸 發器。

delte、insert、update:指定觸發事件,多個事件間用or串連。

of Column:指定在哪些列上執行update觸發。

for each row:表示該觸發器是行級的,只有行級的觸發器才能使用old和new關鍵字。

範例程式碼:

create or replace trigger moduleInsertTrigger after inserton t_module  begin    dbms_output.put_line('The Name is: ' || :new.name);  end;

2、建立觸發器的限制

(1)觸發器代碼大小必須小於32KB

(2)觸發器中有效語句可以包括DML語句,但不能包括DDL語句;rollback、commit、savepoint也不 能使用。但是,對於系統觸發器可以使用create、alter、drop table和alter...compile語句。

(3)long、long raw和lob的限制:

a.不能插入資料到long或long raw

b.來自long或long raw的資料可以轉換成字元型,但是不能超過32KB

c.使用long或long raw不能聲明變數

d.在long或long raw列中不能使用:new和:parent

e.在lob中的:new變數不能修改

(4)引用包變數的限制:如果update或delete語句檢測到當前的update衝突,則Oracle會執行 rollback到savepoint上並重新啟動更新。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.