[oracle]pl/sql --分頁過程demo

來源:互聯網
上載者:User

標籤:基本   名稱   loop   arc   table   ref   row   ica   out   

這句sql能夠用來查詢一張表中的特定位置的記錄

 

--查詢的方法擷取分頁的語句 select *from  (select t1.*,rownum rn from (select *from books) t1 where rownum<=4) where rn >2; 

--使用分頁寫預存程序

--1 首先要建立一個包,定義遊標類型 
create or replace package fenyepackage as  type fenye_cursor is ref cursor; end fenyepackage; 


--2 基本的過程 
create or replace procedure fenye( tablename in varchar2,  --表名 pagesize in number,    --每頁有多大 pagenow in  number,     --當前頁 myrows out number,     --總共多少記錄 mypageconnt out number,   --總共多少頁 l_cursor out fenyepackage.fenye_cursor --遊標 ) is --得到記錄的開始和結束的位置 v_begin number:=(pagenow-1)*pagesize+1; v_end number:=pagenow*pagesize; v_sql varchar(1000); begin v_sql:=‘select bookid,bookname,pubhouse from (select t1.*,rownum rn from (select *from ‘||tablename||‘) t1 where rownum<=‘||v_end||‘)where rn >=‘||v_begin; open l_cursor for v_sql; v_sql:=‘select count(*) from ‘||tablename; execute immediate v_sql into myrows; if mod(myrows,pagesize)=0 then   mypageconnt:=myrows/pagesize; else    mypageconnt:=myrows/pagesize+1; end if;   --close l_cursor; end; 

 --3 使用procedure測試 
create or replace procedure fenyeceshi( tablename in varchar2,pagesize in number,pagenow in number) is v_myrows number; v_mypagecount number; v_bookid books.bookid%type; v_bookname books.bookname%type; v_pubhouse books.pubhouse%type; l_cursor fenyepackage.fenye_cursor; begin    fenye(tablename,pagesize,pagenow,v_myrows,v_mypagecount,l_cursor); --使用迴圈讀出特定頁的記錄  loop      fetch l_cursor into v_bookid,v_bookname,v_pubhouse;     --not found要連在一起寫     exit when l_cursor%notfound;     dbms_output.put_line(‘圖書ID是:‘||v_bookid||‘  名稱是:‘||v_bookname||‘  出版社是‘||v_pubhouse);   end loop;   dbms_output.put_line(‘總的記錄為:‘||v_myrows||‘條‘);   dbms_output.put_line(‘總的頁數為:‘||v_mypagecount||‘頁‘); end; 


SQL> exec fenyeceshi(‘books‘,2,2);   圖書ID是:3  名稱是:angle  出版社是20 圖書ID是:4  名稱是:anglele  出版社是10 總的記錄為:4條 總的頁數為:2頁   PL/SQL procedure successfully completed 


??: 這樣是能得到結果,可是主過程中對於遊標是否關閉非常疑惑

沒有關閉的情況下是正常的,關閉了的話會出錯

這個問題,待後面解決?

SQL> exec fenyeceshi(‘books‘,2,2);   begin fenyeceshi(‘books‘,2,2); end;   ORA-01001: 無效的遊標 ORA-06512: 在 "SCOTT.FENYECESHI", line 12 ORA-06512: 在 line 2


本文出自 “orangleliu筆記本” 部落格,請務必保留此出處http://blog.csdn.net/orangleliu/article/details/38309427

[oracle]pl/sql --分頁過程demo

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.