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

示例:

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