DB2 - 觸發器



本章描述觸發器,其型別,以及觸發器的建立和刪除。

介紹

觸發器是一組動作,這些動作用於響應資料庫中指定表上的 INSERT、UPDATE 或 DELETE 操作。觸發器一次性儲存在資料庫中。它們處理資料的治理。它們可以被多個應用程式訪問和共享。使用觸發器的優點是,如果應用程式需要進行任何更改,則可以在觸發器處進行更改;而不是更改每個訪問觸發器的應用程式。觸發器易於維護,並且可以加快應用程式的開發速度。觸發器使用 SQL 語句“CREATE TRIGGER”定義。

觸發器的型別

觸發器有兩種型別

1. BEFORE 觸發器

它們在任何 SQL 操作之前執行。

2. AFTER 觸發器

它們在任何 SQL 操作之後執行。

建立 BEFORE 觸發器

讓我們看看如何建立一個觸發器序列

語法

db2 create sequence <seq_name> 

示例:為 shopper.sales1 表建立一個觸發器序列

db2 create sequence sales1_seq as int start with 1 increment by 1 

語法

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set 
<table_object>.<col_name>=nextval for <sequence_name> 

示例:為 shopper.sales1 表建立觸發器以自動插入主鍵編號

db2 create trigger sales1_trigger no cascade before insert on 
shopper.sales1 referencing new as obj for each row set 
obj.id=nextval for sales1_seq

現在嘗試插入任何值

db2 insert into shopper.sales1(itemname, qty, price) 
values('bicks', 100, 24.00) 

從表中檢索值

讓我們看看如何從表中檢索值

語法

db2 select * from <tablename>

示例:

db2 select * from shopper.sales1

輸出:

  ID       ITEMNAME       QTY 
-------  ------------   ---------- 
    3      bicks            100 
    2      bread            100 
  
  2 record(s) selected. 

建立 AFTER 觸發器

讓我們看看如何建立一個 AFTER 觸發器

語法

db2 create trigger <trigger_name> no cascade before insert on 
<table_name> referencing new as <table_object> for each row set
 <table_object>.<col_name>=nextval for <sequence_name> 

示例:[插入和檢索值]

db2 create trigger sales1_tri_after after insert on shopper.sales1 
for each row mode db2sql begin atomic update shopper.sales1 
set price=qty*price; end  

輸出

//inseting values in shopper.sales1 
db2 insert into shopper.sales1(itemname,qty,price) 
values('chiken',100,124.00) 
//output 
ID    ITEMNAME       QTY         PRICE 
----- -------------- ----------- -----------                      
    3 bicks          100         2400.00 
    4 chiken         100         12400.00 
    2 bread          100         2400.00 

	3 record(s) selected. 

刪除觸發器

以下是資料庫觸發器的刪除方法

語法

db2 drop trigger <trigger_name>  

示例

db2 drop trigger slaes1_trigger   
廣告
© . All rights reserved.