通過乙個實際的例子學習Oracle儲存過程

2021-04-22 21:26:52 字數 2178 閱讀 3469

--建立儲存過程

create or replace procedure *********xx_p

(--引數in表示輸入引數,out表示輸入引數,型別可以使用任意oracle中的合法型別。

is_ym  in char)as

--定義變數

vs_msg   varchar2(4000);   --錯誤資訊變數

vs_ym_beg  char(6);      --起始月份

vs_ym_end  char(6);      --終止月份

vs_ym_sn_beg char(6);     --同期起始月份

vs_ym_sn_end char(6);     --同期終止月份

--定義游標(簡單的說就是乙個可以遍歷的結果集)

cursor cur_1 is

select area_code,cmcode,sum(rmb_amt)/10000 rmb_amt_sn,sum(usd_amt)/10000 usd_amt_sn

from bgd_area_cm_m_base_t

where ym >= vs_ym_sn_beg

and ym <= vs_ym_sn_end

group by area_code,cmcode;

begin

--用輸入引數給變數賦初值,用到了oralce的substr to_char add_months to_date 等很常用的函式。

vs_ym_beg := substr(is_ym,1,6);

vs_ym_end := substr(is_ym,7,6);

vs_ym_sn_beg := to_char(add_months(to_date(vs_ym_beg,'yyyymm'), -12),'yyyymm');

vs_ym_sn_end := to_char(add_months(to_date(vs_ym_end,'yyyymm'), -12),'yyyymm');

--先刪除表中特定條件的資料。

delete from *********xx_t where ym = is_ym;

--然後用內建的dbms_output物件的put_line方法列印出影響的記錄行數,其中用到乙個系統變數sql%rowcount

dbms_output.put_line('del上月記錄='||sql%rowcount||'條');

insert into *********xx_t(area_code,ym,cmcode,rmb_amt,usd_amt)

select area_code,is_ym,cmcode,sum(rmb_amt)/10000,sum(usd_amt)/10000

from bgd_area_cm_m_base_t

where ym >= vs_ym_beg

and ym <= vs_ym_end

group by area_code,cmcode;

dbms_output.put_line('ins當月記錄='||sql%rowcount||'條');

--遍歷游標處理後更新到表。遍歷游標有幾種方法,用for語句是其中比較直觀的一種。

for rec in cur_1 loop

update *********xx_t

set rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn

where area_code = rec.area_code

and cmcode = rec.cmcode

and ym = is_ym;

end loop;

commit;

--錯誤處理部分。others表示除了宣告外的任意錯誤。sqlerrm是系統內建變數儲存了當前錯誤的詳細資訊。

exception

when others then

vs_msg := 'error in *********xx_p('||is_ym||'):'||substr(sqlerrm,1,500);

rollback;

--把當前錯誤記錄進日誌表。

insert into log_info(proc_name,error_info,op_date)

values('*********xx_p',vs_msg,sysdate);

commit;

return;

end;

通過乙個實際的例子學習SQLServer儲存過程

前面寫過一篇 通過乙個實際的例子學習oracle儲存過程,現在再來一篇 通過乙個實際的例子學習sqlserver儲存過程。所謂應用而學。定義儲存過程 create procedure xx p 傳遞引數 ym char 6 as 定義變數,xx表示區域性變數,xx表示全域性變數。定義多個變數用 號分...

通過乙個實際的例子學習Oracle儲存過程

create or replace procedure xx p 引數in表示輸入引數,out表示輸入引數,型別可以使用任意oracle中的合法型別。is ym in char as 定義變數 vs msg varchar2 4000 錯誤資訊變數 vs ym beg char 6 起始月份 vs ...

通過乙個實際的例子學習Oracle儲存過程

建立儲存過程 create or replace procedure xx p 引數in表示輸入引數,out表示輸入引數,型別可以使用任意oracle中的合法型別。is ym in char as 定義變數 vs msg varchar2 4000 錯誤資訊變數 vs ym beg char 6 起...