oracle觸發器的寫法是什么

oracle中,觸發器是在指定條件成立時,會自動執行定義的語句,寫法為“create [or replace] tigger 觸發器名 觸發時間 觸發事件 on 表名[for each row]begin pl/sql語句 end”。

oracle觸發器的寫法是什么

本教程操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle觸發器的寫法是什么

一、觸發器簡介

觸發器的定義就是說某個條件成立的時候,觸發器里面所定義的語句就會被自動的執行。

因此觸發器不需要人為的去調用,也不能調用。

然后,觸發器的觸發條件其實在你定義的時候就已經設定好了。

這里面需要說明一下,觸發器可以分為語句級觸發器和行級觸發器。

詳細的介紹可以參考網上的資料,簡單的說就是語句級的觸發器可以在某些語句執行前或執行后被觸發。而行級觸發器則是在定義的了觸發的表中的行數據改變時就會被觸發一次。

具體舉例:

1、 在一個表中定義的語句級的觸發器,當這個表被刪除時,程序就會自動執行觸發器里面定義的操作過程。這個就是刪除表的操作就是觸發器執行的條件了。

2、 在一個表中定義了行級的觸發器,那當這個表中一行數據發生變化的時候,比如刪除了一行記錄,那觸發器也會被自動執行了。

二、觸發器語法

觸發器的語法:

create?[or?replace]?tigger?觸發器名?觸發時間?觸發事件 on?表名 [for?each?row] begin ?pl/sql語句 end

其中:

  • 觸發器名:觸發器對象的名稱。由于觸發器是數據庫自動執行的,因此該名稱只是一個名稱,沒有實質的用途。

  • 觸發時間:指明觸發器何時執行,該值可取:

  • before:表示在數據庫動作之前觸發器執行;

  • after:表示在數據庫動作之后觸發器執行。

  • 觸發事件:指明哪些數據庫動作會觸發此觸發器:

  • insert:數據庫插入會觸發此觸發器;

  • update:數據庫修改會觸發此觸發器;

  • delete:數據庫刪除會觸發此觸發器。

  • 表 名:數據庫觸發器所在的表。

  • for each row:對表的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。

觸發器能實現如下功能:

功能:

1、 允許/限制對表的修改

2、 自動生成派生列,比如自增字段

3、 強制數據一致性

4、 提供審計和日志記錄

5、 防止無效的事務處理

6、 啟用復雜的業務邏輯

舉例

1)、下面的觸發器在更新表tb_emp之前觸發,目的是不允許在周末修改表:

create?or?replace?trigger?auth_secure?before?insert?or?update?or?DELETE on?tb_emp begin ??IF(to_char(sysdate,'DY')='星期日')?THEN ????RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp'); ??END?IF; END; /

2)、使用觸發器實現序號自增

創建一個測試表:

create?table?tab_user( ??id?number(11)?primary?key, ??username?varchar(50), ??password?varchar(50) );

創建一個序列:

復制代碼 代碼如下:

create?sequence?my_seq?increment?by?1?start?with?1?nomaxvalue?nocycle?cache?20;

創建一個觸發器:

CREATE?OR?REPLACE?TRIGGER?MY_TGR ?BEFORE?INSERT?ON?TAB_USER ?FOR?EACH?ROW--對表的每一行觸發器執行一次 DECLARE ?NEXT_ID?NUMBER; BEGIN ?SELECT?MY_SEQ.NEXTVAL?INTO?NEXT_ID?FROM?DUAL; ?:NEW.ID?:=?NEXT_ID;?--:NEW表示新插入的那條記錄 END;

向表插入數據:

insert?into?tab_user(username,password)?values('admin','admin'); insert?into?tab_user(username,password)?values('fgz','fgz'); insert?into?tab_user(username,password)?values('test','test'); COMMIT;

查詢表結果:SELECT * FROM TAB_USER;

推薦教程:《Oracle視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享