Oracle儲存過程基本語法

2021-09-01 20:09:09 字數 3111 閱讀 7997

1 create or replace procedure 儲存過程名

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

oracle儲存過程基本語法 2 is 3 begin 4 null 5 end 行1 create or replace procedure 是乙個sql語句通知oracle資料庫去建立乙個叫做skeleton儲存過程,如果存在就覆蓋它 行2 行3 行4 null pl sql語句表明什麼事都不做...