首頁 > 資料庫 > Oracle > 主體

oracle觸發器的寫法是什麼

WBOY
發布: 2022-01-25 12:07:20
原創
15409 人瀏覽過

在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影片教學

以上是oracle觸發器的寫法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板