Oracle儲存過程 包 方法使用總結 推薦

2021-08-14 21:01:17 字數 4210 閱讀 9526

oracle儲存過程、包、方法使用總結,具體**如示:

「` /**

*@author:zhengwei

*@date:2017-04-28

*@desc:儲存過程用法總結

*/ create or replace procedure myprocedure(p_id in varchar,

p_status out varchar) –p_id為輸入引數 ,p_status為輸出引數

as —變數宣告

t_status varchar2(20);

t_id number;

v_postype varchar2(20);

v_description varchar2(20);

—物件變數定義和宣告

type xrecord is record(

fund varchar2(50),

batch_no varchar2(50),

tran_amt number,

end_bal number,

tran_date varchar2(50),

tran_time varchar2(50),

sub_water number);

xwater xrecord;

—游標宣告,並填充資料

cursor my_cur is

select pos_type, description from votemaster;

begin

—變數賦值(注意:in型別的引數不能直接賦值)

t_status := 『1』;

p_status := t_status;

dbms_output.put_line(『p_status:』 || p_status);

begin

—迴圈游標,使用游標

for v_row in my_cur loop

begin

v_postype := v_row.pos_type;

v_description := v_row.description;

dbms_output.put_line(『postype:』 || v_postype || 『,description:』 ||

v_description);

end;

end loop;

end;

—while迴圈用法

begin

while i < 10 loop

begin

i := i + 1;

end;

end loop;

end;

–將select查詢的結果存入到變數中,可以同時將多個列儲存多個變數中,必須有一條記錄,否則丟擲異常(如果沒有記錄丟擲no_data_found)

begin

select col1, col2 into 變數1, 變數2 from typestruct where ***;

exception

when no_data_found then

***x;

end;

—if判斷語句用法

begin

select votetitle, vatesum

into t_name, t_count

from votemaster

where id = p_id;

if t_count <= 0 then

p_status := t_name || 『:差』;

elsif t_count > 0 and t_count < 3 then

p_status := t_name || 『:良好』;

else

p_status := t_name || 『:優秀』;

end if;

end;

—物件變數賦值

begin

select fund,

batch_no,

tran_amt,

end_bal,

tran_date,

tran_time,

sub_water

into xrecord

from acct_water

where fund = p_id;

–物件變數的使用

dbms_output.put_line(xrecord.batch_no || xrecord.fund);

end;

—索引表

—我們在使用儲存過程的時候經常需要處理記錄集,也就是多條資料記錄。分為單列多行和多列多行,這些型別都可以稱為集合型別。索引表就是集合型別中的一種。

—索引表,也稱為pl/sql表,不能儲存於資料庫中,元素的個數沒有限制,下標可以為負值。

—使用場景:如果僅僅是在儲存過程中當作集合變數使用,索引表是最好的選擇。(也可以通過建立臨時表替代,但就不那麼科學了,而且後期還得維護臨時表)

—索引表物件使用方案1:

begin

—索引表物件宣告、定義、使用

declare

type acct_table_type is table of acct%rowtype index by binary_integer;

—定義了乙個索引表v_acct_table,其表中的每行記錄是acct表中的一行記錄

v_acct_table acct_table_type;

begin

select * bulk collect —bulk collect into指是乙個成批聚合型別, 簡單的來說 , 它可以儲存乙個多行多列儲存型別

into v_acct_table

from acct

where acct_type = 『570』

and rownum < 5;

for i in 1 .. v_acct_table.count loop

dbms_output.put_line(『acct:』 || v_acct_table(i).fund || 『,』 || v_acct_table(i).bal || 『,』 || v_acct_table(i)

.real_nmbr);

end loop;

end;

end;

—索引表物件使用方案2:

begin

–例子:利用記錄record可用整體賦值的特性來填充pl/sql表

declare

type rectype is record(

fund acct.fund%type,, —表示定義的變數的型別為表acct的fund欄位的同樣資料型別

bal acct.bal%type,

owner acct.owner%type,

real_nmbr varchar(30));

—定義了乙個索引表mytab,其表中的每行記錄是record

type tabtype is table of rectype index by binary_integer;

mytab tabtype;

vn number;

begin

–填充

vn := 1;

for varr in (select fund, bal, owner, real_nmbr

from acct

where rownum <= 15

order by fund asc) loop

mytab(vn) := varr; –記錄整體賦值

vn := vn + 1;

end loop;

–訪問

vn := mytab.first;

for varr in vn .. mytab.count loop

dbms_output.put_line(vn || 』 』 || mytab(vn).fund || 』 』 || mytab(vn).bal ||

』 』 || mytab(vn).owner || 』 』 || mytab(vn)

.real_nmbr);

vn := mytab.next(vn);

end loop;

end;

end;

以上僅供參考 實力有限 如有異同 望大家多多指教。

oracle包中的儲存過程

獲取資訊列表 procedure pro get article list sidpara in cms category.cat sid type,欄目編號 usernamepara in varchar2,當前使用者 currpagepara in number,當前第幾頁 pagesizepa...

oracle儲存過程 cursor使用

create or replace procedure test is v count number 4 cursor v c is select from t2voucherhandno begin select count into v count from t2voucherhandno if...

使用oracle儲存過程分頁

1.首先在oracle中建儲存過程,儲存過程名庫 procedure prc query create or replace procedure prc query p tablename in varchar2,表名 p strwhere in varchar2,查詢條件 p ordercolum...