ORACLE10G 分頁存儲過程

 CREATE OR REPLACE 

PROCEDURE PAGING (TableName IN VARCHAR,Fields IN VARCHAR DEFAULT '*',OrderField IN VARCHAR,sqlWhere VARCHAR,pageSize IN 
INT,pageIndex IN INT DEFAULT 1,totalPage OUT INT,totalRecord OUT INT,RS OUT RESULTSET.RS)
AS
tsql varchar(4000);
doPageIndex int:=pageIndex;--當前頁碼
StartRecord int;--開始點
EndRecord int;--結束點
begin
--commit;  --開始事務
--計算總記錄數
If (sqlWhere is NULL) Then
tsql:='Select Count(*) as totalRecord From '||TableName;
Else
tsql:='Select Count(*) as totalRecord From '||TableName||' Where '||sqlWhere;
End If;
execute immediate tsql into totalRecord;
--計算總頁數
    totalPage:=ceil((totalRecord+0.0)/pageSize);
If (sqlWhere is NULL) Then
tsql:='Select * From (Select ROW_NUMBER() Over(Order By '||OrderField||') growID,'||Fields||' From '||TableName;
    Else
tsql:='Select * From (Select ROW_NUMBER() Over(Order By '||OrderField||') growID,'||Fields||' From '||TableName||' Where '||sqlWhere;
End If;
--DBMS_OUTPUT.PUT_LINE(doPageIndex);
--處理頁數超出範圍情況
    If (pageIndex<=0) Then
doPageIndex:=1;
End If;
    If (pageIndex>totalPage) Then
        doPageIndex:=totalPage;
End If;
--處理開始點和結束點
StartRecord:=(doPageIndex-1)*pageSize+1;
EndRecord:=StartRecord+(pageSize-1);
--繼續合成SQL語句
tsql:=tsql||') '||TableName||' Where growID Between '||StartRecord||' And '||EndRecord;
DBMS_OUTPUT.PUT_LINE(tsql);
open RS for tsql;
--rollback;
end PAGING;
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章