複雜的 oracle 儲存過程和觸發器複製資料

2021-05-10 21:22:53 字數 3945 閱讀 9312

一。儲存過程的建立和使用

1.建立程式包,並在程式中建立儲存過程

create or replace

package ncs_icp_tj as

/*[email protected]*/

/* todo 在此輸入程式包宣告 (型別, 異常錯誤, 方法等) */

/*根據備案主體id拷貝通過表備案資料到備案臨時表,拷貝5張*/

procedure icp_pass_to_temp(

v_main_id in icp_gn_temp_baxx_zt.ztid%type,

v_lyd     in icp_gn_temp_baxx_zt.sjxt_ztid%type,

v_in_hmd  in icp_gn_temp_baxx_zt.in_hmd%type,

v_czlb    in icp_gn_temp_baxx_zt.czlb%type,

v_bajd    in icp_gn_temp_baxx_zt.bajd%type

);           

end ncs_icp_tj;

2.建立程式包包體,並在程式中建立儲存過程實現

/*插入網域名稱*/

insert into icp_gn_temp_baxx_ymlb

(lsh, bbdw,ymid, ztid, wzid, sjxt_ymid, ym)

select

v_lsh, bbdw,id, v_main_id, wzid, sjxt_ymid, ym

from icp_gn_baxx_ymlb

where ztid = v_main_id;

end icp_pass_to_temp;

end ncs_icp_tj;

3.  呼叫儲存過程,call ncs_icp_tj.icp_pass_to_temp(5,1,0,2,17)

本儲存過程的呼叫,實現了從5張通過表複製資料到5張臨時表

二,觸發器的建立。

1.行級觸發器,沒插入一條資料執行一次, 向臨時表中加入資料時,執行此觸發器,把臨時表插入到臨時表的資料複製的日誌表中

create or replace

trigger trigger_icp_temp_zt_insert

after insert on icp_gn_temp_baxx_zt

for each row

begin

insert into icp_gn_baxx_xgls_zt

(id,lsh, bbdw,ls_id,ztid,sjxt_ztid, dwmc, dwxz, tzz, zjlx, zjhm, shengid,

shiid, xianid, xxdz, zjzs,jylx, wzfzr, wzfzr_zjlx, wzfzr_zjhm, wzfzr_dhhm, wzfzr_sjhm,

wzfzr_dzyj, wzfzr_msn, wzfzr_qq, baxh, shr_xm,

shsj, bz, lryhlx, lr_yhm_id, bamm)

values( 

seq_icp_gn_baxx_xgls_zt_id.nextval,:new.lsh, :new.bbdw,:new.czlb,:new.ztid,:new.sjxt_ztid, :new.dwmc, :new.dwxz, :new.tzz, :new.zjlx, :new.zjhm, :new.shengid,

:new.shiid, :new.xianid, :new.xxdz, :new.zjzs,:new.jylx, :new.wzfzr, :new.wzfzr_zjlx, :new.wzfzr_zjhm, :new.wzfzr_dhhm, :new.wzfzr_sjhm,

:new.wzfzr_dzyj, :new.wzfzr_msn, :new.wzfzr_qq, :new.baxh, :new.shr_xm,

:new.shsj, :new.bz, :new.lryhlx, :new.lr_yhm_id, :new.bamm);

end;

create or replace trigger trigger_icp_temp_wz_insert

after insert on icp_gn_temp_baxx_wz

for each row

begin

insert into icp_gn_baxx_xgls_wz

(id,

lsh,bbdw,wzid, ztid, sjxt_wzid, wzmc, syurl,wzfzr, wzfzr_zjlx, wzfzr_zjhm, wzfzr_dhhm,

wzfzr_sjhm, wzfzr_dzyj, wzfzr_msn, wzfzr_qq, nrlx, fwnr, baxh, lryhlx, lr_yhm_id,bz, ls_id)

values( seq_icp_gn_baxx_xgls_wz_id.nextval,

:new.lsh,:new.bbdw,:new.wzid, :new.ztid, :new.sjxt_wzid,  :new.wzmc, :new.syurl,:new.wzfzr, :new.wzfzr_zjlx, :new.wzfzr_zjhm, :new.wzfzr_dhhm,

:new.wzfzr_sjhm, :new.wzfzr_dzyj, :new.wzfzr_msn, :new.wzfzr_qq, :new.nrlx, :new.fwnr, :new.baxh, :new.lryhlx, :new.lr_yhm_id,:new.bz,1);

end;

create or replace

trigger trigger_icp_temp_jr_insert

after insert on icp_gn_temp_baxx_jr

for each row

begin

insert into icp_gn_baxx_xgls_jr

(id,

lsh, bbdw,jrid, ztid, wzid, sjxt_jrid, ssisp,

wzfb, wzjrfs, lryhlx, lr_yhm_id, ls_id

)values (seq_icp_gn_baxx_xgls_jr_id.nextval,

:new.lsh, :new.bbdw,:new.jrid, :new.ztid, :new.wzid, :new.sjxt_jrid, :new.ssisp,

:new.wzfb, :new.wzjrfs, :new.lryhlx, :new.lr_yhm_id,1);

end;

create or replace

trigger trigger_icp_temp_iplb_insert

after insert on icp_gn_temp_baxx_iplb

for each row

begin

insert into icp_gn_baxx_xgls_iplb

(id,

lsh,bbdw,ipid, ztid, wzid, jrid, sjxt_ipid, qsip, zzip, ls_id

)values( seq_icp_gn_baxx_xgls_iplb_id.nextval,

:new.lsh,:new.bbdw,:new.ipid, :new.ztid, :new.wzid, :new.jrid, :new.sjxt_ipid, :new.qsip, :new.zzip,1);

end;

2.表級觸發器 插入整個過程中,觸發器只之行一次 ,當向aaa表中如入一條資料,將真個aaa表的資料複製bbb表

create or replace

trigger trigger_aaa_insert

after insert on aaa

begin

insert into bbb(userid, username)

select id, username from aaa;

end;

Oracle儲存過程和儲存函式

參看 oracle儲存過程 儲存函式 說明 儲存過程 儲存函式都是物件。包括表 檢視 索引 序列 同義詞等也是物件。概念 指儲存在資料庫中供所有使用者程式呼叫的子程式叫儲存 過程 儲存函式。特點 完成特定功能的程式。區別 儲存函式可以通過return子句返回乙個值。建立和使用儲存過程 用create...

ORACLE的儲存過程和函式

儲存過程 儲存函式 指儲存在資料庫中供所有使用者程式呼叫的子程式 儲存過程和儲存函式的相同點 完成特定功能的程式 儲存過程和儲存函式的區別 是否用return語句返回值 儲存函式用return語句返回值,而儲存過程不能 建立和使用儲存過程 用create procedure 命令建立儲存過程和儲存函...

Oracle入門基礎(十二)一一儲存過程及觸發器

列印hello world 呼叫儲存過程 1.exec sayhelloworld 2.begin sayhelloworld sayhelloworld end create or replace procedure sayhelloworld as 說明部分 begin dbms output....