達夢數據庫的觸發器管理

達夢數據庫的觸發器管理

觸發器類型有分爲操作前觸發、操作後觸發、DLL事件觸發、系統事件觸發、時間觸發等等,觸發器與存儲過程的區別是觸發器不能單獨執行調用,而是在用戶執行特定語句時自動觸發執行觸發器。以下舉例常見的插入事件、更新事件做演示。

1、創建BEFORE觸發器測試
準備工作
創建觸發器前先建兩張測試表(數據表和結果表),目的在數據表插入前就執行觸發器裏的語句,觸發器裏的語句是統計當前數據庫的記錄數。
create table tab_before(id int, name varchar(20));
insert into tab_before values(1,'aaa');
insert into tab_before values(2,'bbb');
insert into tab_before values(3,'bbb');

create table tab_before_result (type varchar(20),num int);
達夢數據庫的觸發器管理

創建觸發器
create or replace trigger trigger_before
before insert on tab_before
begin
insert into tab_before_result select 'before',count(*) from tab_before;
end;
/
達夢數據庫的觸發器管理

測試驗證
插入一條數據測試,看看是不是統計插入前的記錄數
insert into tab_before values(4,'bbb');

查看的結果是隻有3條初始化的記錄,第4條插入的記錄未統計。
select * from tab_before_result;
達夢數據庫的觸發器管理

2、創建AFTER觸發器測試
準備工作
創建觸發器前同樣也先建兩張測試表(數據表和結果表),目的是在數據表插入後執行觸發器裏的語句,觸發器裏的語句是統計當前最新數據庫的記錄數。
create table tab_after(id int, name varchar(20));
insert into tab_after values(1,'aaa');
insert into tab_after values(2,'bbb');
insert into tab_after values(3,'bbb');

create table tab_after_result (type varchar(20),num int);
達夢數據庫的觸發器管理

創建觸發器
create or replace trigger trigger_after
after insert on tab_after
begin
insert into tab_after_result select 'after',count(*) from tab_after;
end;
/
達夢數據庫的觸發器管理

測試驗證
插入一條數據測試,看看是不是統計插入後的記錄數
insert into tab_after values(4,'bbb');

查看的結果是統計最新的4條初始化的記錄,包含了第4條插入的記錄。
select * from tab_after_result;
達夢數據庫的觸發器管理

3、創建DLL事件觸發器測試
準備工作
創建觸發器前先建兩張測試表(數據表和結果表),當數據庫發生DDL語句操作時會執行觸發器裏的語句內容。
測試1:在數據表插入記錄,看是否會執行觸發器裏的語句。
目的2:創建一張新表看結果表發生的變化,看是否會執行觸發器裏的語句。
create table tab_ddl(id int, name varchar(20));
create table tab_ddl_result (type varchar(20),num int);
達夢數據庫的觸發器管理

創建觸發器
create or replace trigger trigger_ddl
before create
on schema
begin
insert into tab_ddl_result select 'ddl',count(*) from tab_ddl;
end;
/
達夢數據庫的觸發器管理

測試驗證
插入一條數據測試,結果是沒有執行觸發器
insert into tab_ddl values(1,'aaa');
達夢數據庫的觸發器管理

創建一張表測試,結果是執行了觸發器裏的語句
create table tab_ddl2(id int, name varchar(20));
達夢數據庫的觸發器管理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章