很多時候,我們想通過儲存過程獲得乙個輸出集。我們知道sql server的儲存過程在執行之後,返回的就是乙個集合。但是oracle如果要獲得乙個輸出集合,就要麻煩一點了。
oracle獲得輸出集合是通過游標實現的,而且游標需要在package中進行宣告。下面就拿分頁的儲存過程為例。
首先,先建立乙個包package,類似於c#中的介面,只用於申明,沒有任何實際的**。
create or replace package forpaged is
type my_csr is ref cursor;
procedure getpaged(pagesize in number,pageindex in number,totalpage out number,csr out forpaged.my_csr);
end forpaged;
其實包裡面就是乙個游標的申明和這個包包含的儲存過程。游標的申明在這裡很像c#中輸出引數型別的申明。
第二步,就是實現剛才包中申明的儲存過程。
create or replace procedure getpaged(pagesize in number,pageindex in number,totalpage out number,csr forpaged.my_csr) is
begin
select count(*) into totalpage from orders;
totalpage := ceil(totalpage*1.0/pageszie);
open csr for
select * from (
select t.*,rownum rn from(
select * from orders order by id desc
) twhere rownum >= (pageindex - 1)*pageszie +1
)where t.rn < (pageindex*pagesize + 1);
end getpaged;
第三步,進行測試。如果我們想直接在pl/sql developer中進行測試,直接在儲存過程名稱處右鍵,選擇test,在跳出的頁面下面輸入引數的值就行了。
Oracle使用儲存過程返回查詢游標
如果報表邏輯非常複雜的話,可以把報表邏輯放到儲存過程裡,加工乙個全域性臨時表。前端查詢的時候只查詢臨時表即可。只是第一次查詢需要忍受加工的時間。建立儲存過程,返回sys refcursor create or replace procedure p get agent v agent cate in...
Oracle儲存過程返回游標
oracle儲存過程返回游標 有倆種方法 一種是宣告系統游標,一種是宣告自定義游標,然後後面操作一樣,引數型別為 in out 或out 1 宣告個人系統游標.推薦 create or replace p temp procedure cur arg out sys refcursor 方法1 be...
oracle 儲存過程返回游標
示例,很多時候我們需要返回結果集,這個時候,我們就可以返回游標的方式給別人呼叫 create or replace procedure getprocontactinfowithpropid prop id in varchar2,outcursor out sys refcursor isbegi...