oracle觸發器實踐 增,改,刪

2021-09-01 17:08:30 字數 2528 閱讀 3783

實現對某個表的增改刪的監控操作,並記錄到另乙個表中...

具體**如下:

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...