oracle使用儲存過程返回資料集
阿新 • • 發佈:2019-01-04
很多時候,我們想通過儲存過程獲得一個輸出集。我們知道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 ) t where rownum >= (pageIndex - 1)*pageSzie +1 ) where t.rn < (pageIndex*pageSize + 1); end getPaged; 第三步,進行測試。如果我們想直接在PL/SQL Developer中進行測試,直接在儲存過程名稱處右鍵,選擇test,在跳出的頁面下面輸入引數的值就行了。
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 ) t where rownum >= (pageIndex - 1)*pageSzie +1 ) where t.rn < (pageIndex*pageSize + 1); end getPaged; 第三步,進行測試。如果我們想直接在PL/SQL Developer中進行測試,直接在儲存過程名稱處右鍵,選擇test,在跳出的頁面下面輸入引數的值就行了。
參考自:https://www.cnblogs.com/jerrmy/archive/2013/03/14/2959360.html