--建立儲存過程
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...