很多時候,我們想通過存儲過程獲得一個輸出集。我們知道sql server的存儲過程在執行之后,返回的就是一個集合。但是oracle如果要獲得一個輸出集合,就要麻煩一點了。
?????? procedure getPaged(pageSize in number,pageIndex in number,totalPage out number,csr out forPaged.my_csr);
end forPaged;
? ? ?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,在跳出的頁面下面輸入參數的值就行了。之前不知道這樣就可以進行測試,所以自己又寫了一段測試代碼,由于水平不高,寫出來之后還是錯的,如果有哪位寫過類似的代碼,還請分享一下。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
