程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> [oracle]pl/sql--分頁過程demo

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

編輯:Oracle教程

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


這句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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved