實現對某個表的增改刪的監控操作,並記錄到另乙個表中...
具體**如下:
create or replace trigger test_trigger
before insert or update or delete on test_table
for each row
declare
v_id varchar2(30);
v_bdlb varchar2(1);
v_jgdm varchar2(12);
v_jgmc varchar2(60);
v_gajgmc varchar2(60);
v_gajgwsmc varchar2(30);
v_jz varchar2(30);
v_ksdwsdwmc varchar2(30);
begin
/*插入時往歷史表中存放的是新插入的資料.
修改時往歷史表中存放的是修改後的資料.
刪除時往歷史表中存放的是刪除之前的資料.
*/select org_id_s.nextval into v_id from dual; -- 利用seq生成主鍵
v_jgdm := :new.row_id;
v_jgmc := :new.dept_name;
v_gajgmc := :new.dept_name;
v_gajgwsmc := :new.bmjc;
v_jz := substr(v_jgdm, 7, 2);
if '2' = :new.depttype then
v_ksdwsdwmc := 'shiju';
else
if '03' = v_jz then
v_ksdwsdwmc := 'zhi';
elsif '05' = v_jz then
v_ksdwsdwmc := 'xing';
elsif '51' = v_jz then
v_ksdwsdwmc := 'she';
else
v_ksdwsdwmc := 'qita';
end if;
end if;
if inserting then
v_bdlb := '1';
insert into test_table_h
(id, bdlb, jgdm, jgmc, gajgmc, gajgwsmc, jz, ksdwsdwmc)
values
(v_id,
v_bdlb,
v_jgdm,
v_jgmc,
v_gajgmc,
v_gajgwsmc,
v_jz,
v_ksdwsdwmc);
elsif updating then
v_bdlb := '2';
insert into test_table_h
(id, bdlb, jgdm, jgmc, gajgmc, gajgwsmc, jz, ksdwsdwmc)
values
(v_id,
v_bdlb,
v_jgdm,
v_jgmc,
v_gajgmc,
v_gajgwsmc,
v_jz,
v_ksdwsdwmc);
else
v_bdlb := '3';
v_jgdm := :old.row_id;
v_jgmc := :old.dept_name;
v_gajgmc := :old.dept_name;
v_gajgwsmc := :old.bmjc;
v_jz := substr(v_jgdm, 7, 2);
if '2' = :old.depttype then
v_ksdwsdwmc := 'shiju';
else
if '03' = v_jz then
v_ksdwsdwmc := 'zhi';
elsif '05' = v_jz then
v_ksdwsdwmc := 'xing';
elsif '51' = v_jz then
v_ksdwsdwmc := 'she';
else
v_ksdwsdwmc := 'qita';
end if;
end if;
insert into test_table_h
(id, bdlb, jgdm, jgmc, gajgmc, gajgwsmc, jz, ksdwsdwmc)
values
(v_id,
v_bdlb,
v_jgdm,
v_jgmc,
v_gajgmc,
v_gajgwsmc,
v_jz,
v_ksdwsdwmc);
end if;
end;
Oracle資料寫入自增 觸發器
oracle不能像mysql和sql server那樣設定主鍵自增,在寫入資料的時候需要用 1 序列 觸發器 的方式使資料表的一列或多列實現自增。兩者可在檢視中建立,也可以使用sql語句建立。2 或者只建立序列,插入時之江將序列.nextval 作為值插入。1 建立序列 dual 的sql語句 cr...
oracle自增序列及其觸發器
遷移資料庫mysql oracle,oracle中沒有mysql中的自增功能,使用序列及觸發器實現 create sequence userid sequence 序列名 userid sequence 為序列名,隨便取名 increment by 1 每次增加1 start with 1 從1開始...
oracle 觸發器trigger(主鍵自增長)
觸發器我們也可以認為是儲存過程,是一種特殊的儲存過程。儲存過程 有輸入引數和輸出引數,定義之後需要呼叫 觸發器 沒有輸入引數和輸出引數,定義之後無需呼叫,在適當的時候會自動執行。資料的新增 修改 刪除 操作的時候 儲存過程 觸發器create proc proc name 宣告輸入引數和輸出引數 a...