oracle返回結果集

來源:互聯網
上載者:User

標籤:style   blog   color   io   使用   ar   strong   for   div   

新項目啟動想使用預存程序返回結果集,上家公司經常寫,這才幾年就忘的差不多了,費了老大勁才搞好。留個印,以備後續查看。。。

oracle 返回結果集 需要使用到包(package),結果集是作為遊標類型(CURSOR)返回. 且返回的結果集不能在pl/sql中利用exec 儲存

過程名() 看到結果集(模糊記得是可以但沒實現,通過函數實現是看到的一個遊標結果集,點擊是可以看到結果集的,也許是記錯了,

期待有知道的朋友解答)。

 

案例代碼,實現分頁預存程序。

fn_page 通過函數實現分頁,pl/sql執行 可以看到結果集,但函數不夠靈活;

sp_page 預存程序實現。

包頭的定義

fn_page

 1 CREATE OR REPLACE PACKAGE pkg_test 2 AS 3 type refCursorType is REF CURSOR; 4  5 function fn_Page 6  (p_PageSize int, --每頁記錄數 7 p_PageNo int, --當前頁碼,從 1 開始 8 p_SqlSelect varchar2)  9  return refCursorType;10 11 PROCEDURE sp_Page12   (p_PageSize int, --每頁記錄數13 p_PageNo int, --當前頁碼,從 1 開始14 p_SqlSelect varchar2, --查詢語句,含排序部分15 p_OutRecordCount out int,--返回總記錄數16 p_OutCursor out refCursorType); --Package中聲明名為get 的Procedure(只有介面沒內容)17 18 19 END pkg_test;

包體

 1 create or replace package body pkg_test 2 as procedure sp_Page(p_PageSize int, --每頁記錄數 3 p_PageNo int, --當前頁碼,從 1 開始 4 p_SqlSelect varchar2, --查詢語句,含排序部分 5 p_OutRecordCount out int,--返回總記錄數 6 p_OutCursor out refCursorType) 7 is 8 v_sql varchar2(3000); 9 v_count int;10 v_heiRownum int;11 v_lowRownum int;12 13 begin14 ----取記錄總數15 v_sql := ‘select count(*) from (‘ || p_SqlSelect || ‘)‘;16 execute immediate v_sql into v_count;17 p_OutRecordCount := v_count;18 ----執行分頁查詢19 v_heiRownum := p_PageNo * p_PageSize;20 v_lowRownum := v_heiRownum - p_PageSize + 1;21 22 v_sql := ‘SELECT *23 FROM (24 SELECT A.*, rownum rn25 FROM (‘|| p_SqlSelect ||‘) A26 WHERE rownum <= ‘|| to_char(v_heiRownum) || ‘27 ) B28 WHERE rn >= ‘ || to_char(v_lowRownum) ;29 --注意對rownum別名的使用,第一次直接用rownum,第二次一定要用別名rn30 31 OPEN p_OutCursor FOR v_sql;32 33 end sp_Page;34 35 -------------------------------------------------------------------------------36 function fn_page37   (p_PageSize int, --每頁記錄數38 p_PageNo int, --當前頁碼,從 1 開始39 p_SqlSelect varchar2) 40 return refCursorType 41 is allinfo refCursorType;42 v_sql varchar2(3000);43 --v_count int;44 v_heiRownum int;45 v_lowRownum int;46 begin47   v_heiRownum := p_PageNo * p_PageSize;48 v_lowRownum := v_heiRownum - p_PageSize + 1;49 50 v_sql := ‘SELECT *51 FROM (52 SELECT A.*, rownum rn53 FROM (‘|| p_SqlSelect ||‘) A54 WHERE rownum <= ‘|| to_char(v_heiRownum) || ‘55 ) B56 WHERE rn >= ‘ || to_char(v_lowRownum) ;57 --注意對rownum別名的使用,第一次直接用rownum,第二次一定要用別名rn58 59 OPEN allinfo FOR v_sql;60  -- open allinfo for select id,name from test where rownum<40;61   return allinfo;62 end fn_page;63 end pkg_test;


調用方式可以使用 call、exec\execute ,begin ... end; 的方式。

 

oracle返回結果集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.