1. 程式人生 > >儲存過程輸出查詢語句過程的固定形式

儲存過程輸出查詢語句過程的固定形式

create or replace procedure 過程名稱

(引數名稱1  引數模式+資料型別,

 引數名稱2  out sys_refcursor)

as

begin

 open引數名稱2 for select語句;

end;

/

舉例1:

create or replace procedure test1

(curout out sys_refcursor)

as

begin

 open curout for select sysdate from dual;

end;

/  

 --此過程不需要輸入變數引數(因為未定義引數變數),直接進行呼叫,輸入sys_refcursor引數過程。

舉例2:

create or replace procedure test2

(p_a varchar2,

 p_binteger,

 p_cnumber,

 cur_out1 out sys_refcursor,

 cur_out2 out sys_refcursor)

as

begin

  ifp_b=1 then

   open cur_out1 for select rownum*3 as rn from dual connect byrownum<=10;

   open cur_out2 for select '無返回值' as rn from dual;

 else

   open cur_out1 for select '無返回值' as rs from dual;

   open cur_out2 for select rownum*3+2 as rs from dual connect byrownum<=10;

  endif;

end;

舉例3:

原表:select * from student;

sno  sname       state     sphone

 1      Anna          西安       123456

 2     Caroline    寶雞       654321

 3    Elly              咸陽       987654

 4    Lily              渭南       456789

create or replace procedure test3

(p_a varchar2,

 p_bnumber,

 p_cnumber,

 cur_out out sys_refcursor)

as

 p_dvarchar2(1000); /*指定執行過程需傳遞的引數*/

 p_enumber;

begin

 ifp_c=1 then

   p_d:='update student set state=''雲南'' wheresname='''||p_a||'''  and sphone='''||p_b||'''';

  execute immediate (p_d);

    if (sql%notfound) then

      open cur_out for select '更新失敗' as rs from dual;

    else

      p_e:=sql%rowcount;

      open cur_out for select ('更新成功,共'||p_e||'行') as rs from dual;

    end if;

 else

    p_d:='update student set state='''||p_a||'''where sphone='''||p_b||'''';

   execute immediate(p_d);

     if (sql%rowcount=0) then

       open cur_out for select '更新失敗' as rs from dual;

     else

       open cur_out for select '更新成功' as rs from dual;

     end if;

 endif;

 commit;

end;

測試1:p_a=Anna,p_b=123456,p_c=1      1     Anna      雲南      123456

測試2:p_a=山西,p_b=456789,p_c=2      4       Lily        山西      456789

更新後的表:

select * from student;

sno  sname         state     sphone

 1        Anna           雲南      123456

 2       Caroline     寶雞      654321

 3       Elly              咸陽      987654

 4       Lily              山西     456789