oracle儲存過程基本語法

2021-07-23 10:01:41 字數 3137 閱讀 4279



oracle儲存過程基本語法

2  is

3  begin

4  null;

5  end;

行1:create or replace procedure 是乙個sql語句通知oracle資料庫去建立乙個叫做skeleton儲存過程, 如果存在就覆蓋它;

行2:行3:

行4:null pl/sql語句表明什麼事都不做,這句不能刪去,因為pl/sql體中至少需要有一句;

行5:create or replace procedure 儲存過程名(param1 in type,

param2 out type) 

as 變數1 型別(值範圍); --vs_msg   varchar2(4000); 

變數2 型別(值範圍);

begin

select count(*) into 變數1 from 表a where列名=param1;

if (判斷條件) then

select 列名 into 變數2 from 表a where列名=param1;

dbms_output。

put_line(『列印資訊』);

elsif (判斷條件) then

dbms_output。

put_line(『列印資訊』);

else

raise 異常名(no_data_found);

end if;

exception

when others then

rollback;

end;

注意事項:

1, 儲存過程引數不帶取值範圍,in表示傳入,out表示輸出

型別可以使用任意oracle中的合法型別。

2,  變數帶取值範圍,後面接分號

3,  在判斷語句前最好先用count(*)函式判斷是否存在該條操作記錄

4,  用select 。。。into。。。給變數賦值

5,  在**中拋異常用 raise+異常名

create or replace procedure儲存過程名

(--定義引數

is_ym  in char(6) ,

the_count out number,

) 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 。。。 

from 。。。 

where 。。。

group by 。。。; 

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 表名 where ym = is_ym; 

--然後用內建的dbms_output

物件的put_line

方法列印出影響的記錄行數,其中用到乙個系統變數

sql%rowcount

dbms_output.put_line('del上月記錄

='||sql%rowcount||'

條');

insert into表名(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 表名

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 儲存過程基本語法

1.基本結構 create or replace procedure 儲存過程名字 引數1 in number,引數2 in number is 變數1 integer 0 變數2 date begin end 儲存過程名字 2.select into statement 將select查詢的結果存...

oracle儲存過程基本語法

1.基本結構 create or replace procedure 儲存過程名字 引數1 in number,引數2 in number is 變數1 integer 0 變數2 date begin end 儲存過程名字 2.select into statement 將select查詢的結果存...

Oracle儲存過程基本語法

1 create or replace procedure 儲存過程名 2 is 3 begin 4 null 5 end 行1 create or replace procedure 是乙個sql語句通知oracle資料庫去建立乙個叫做skeleton儲存過程,如果存在就覆蓋它 行2 行3 行4 ...