oracle語句級觸發器使用操作的歷史資料

2021-09-01 18:04:50 字數 1345 閱讀 1258

在oracle中,觸發器分為三類,行觸發,語句觸發、替代觸發,這裡討論語句觸發,因為在語句級觸發器沒有new和old可以訪問歷史資料,但是很多情況是必須使用這些剛剛更新或刪除的資料進行其他操作,下面提供一種解決方法:首先定義一種表型別  的結構,然後建立乙個行級觸發器,這個觸發器僅做乙個操作,就是利用old、new記錄剛剛操作的資料,然後建立乙個語句級觸發器,在這個語句級觸發器裡面執行相應的業務操作。具體實現如下:(兩個表f分別為aaaa,aaaa_log,功能就是刪除aaaa的資料記錄到aaaa_log中)

-- 建立乙個包 ,

create or replace package tri_pkg

as type temptable is table of aaaa%rowtype index by binary_integer ;

oldrows temptable;

oldemptyrows temptable;

end tri_pkg;

-- 做刪除前清空初始化資料

create or replace trigger aaaa_delete_empty

before delete

on aaaa

begin

tri_pkg.oldrows:=tri_pkg.oldemptyrows;

end;

-- 行級觸發器記錄刪除的記錄

create or replace trigger aaaa_delete_row

after delete

on aaaa

for each row

declare

num integer :=tri_pkg.oldrows.count+1;

begin

tri_pkg.oldrows(num).name:=:old.name;

tri_pkg.oldrows(num).birthdate:=:old.birthdate;

end;

-- 語句觸發器操作業務

create or replace trigger aaaa_delete

after delete

on aaaa

declare

begin

for i in 1..tri_pkg.oldrows.count loop

insert into aaaa_log(name,birthdate) select tri_pkg.oldrows(i).name ,tri_pkg.oldrows(i).birthdate

from dual;

end loop;

end;

oracle觸發器使用

size medium 語法規則 create or replace trigger 模式.觸發器名 before after insert delete update of 列名 on 表名 for each row when 條件 pl sql塊 說明 for each row的意義是 在一次操...

oracle的行級觸發器使用

行級觸發器 當觸發器被觸發時,要使用被插入 更新或刪除的記錄中的列值,有時要使用操作前 後列的值.new 修飾符訪問操作完成後列的值 old 修飾符訪問操作完成前列的值 例1 建立乙個觸發器,當職工表 emp 表被刪除一條記錄時,把被刪除記錄寫到職工表刪除日誌表中去。create table emp...

oracle觸發器使用案例

開發要求 刪除或者更新表tab的行時,更新表cust相應的字段。表tab中custguid欄位和表cust中cust guid欄位是關聯字段,表tab中com欄位和表cust中str欄位是關聯字段。建立表tab,表cust create table tab custguid varchar2 30 ...