Oracle 建立儲存過程例子

2021-09-01 11:10:54 字數 2200 閱讀 9293

--建立儲存過程

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;

**:

oracle 儲存過程例子

oracle 儲存過程學習過程 建立乙個最簡單的儲存過程 create or replace procedure test xg p1 is begin dbms output.put line hello world this is the first procedure end 建立乙個帶輸入輸...

oracle儲存過程簡單例子

先建立一張表 create table mytest name varchar2 30 passwd varchar2 30 建立儲存過程 create or replace procedure sp pro1 is begin insert into mytest values jack 123 ...

oracle儲存過程 建立儲存過程語句

一 建立儲存過程語句 語法 create or replace procedure testname argument1 type1,as begin end testname 例子 create orreplace procedure test name arg1 varchar2,arg2 nu...