真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle如何分頁存儲,oracle分頁的幾種方式

求一個通用ORACLE存儲過程,實(shí)現(xiàn)分頁和查詢?

create

創(chuàng)新互聯(lián)專注于合川網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供合川營銷型網(wǎng)站建設(shè),合川網(wǎng)站制作、合川網(wǎng)頁設(shè)計、合川網(wǎng)站官網(wǎng)定制、微信平臺小程序開發(fā)服務(wù),打造合川網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供合川網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

or

replace

package

Tools

is

type

ResultData

is

ref

cursor;

procedure

sp_Page(p_PageSize

int,

--每頁記錄數(shù)

p_PageNo

int,

--當(dāng)前頁碼,從

1

開始

p_SqlSelect

varchar2,

--查詢語句,含排序部分

p_SqlCount

varchar2,

--獲取記錄總數(shù)的查詢語句

p_OutRecordCount

out

int,--返回總記錄數(shù)

p_OutCursor

out

ResultData);

end

Tools;

create

or

replace

package

body

Tools

is

procedure

sp_Page(p_PageSize

int,

--每頁記錄數(shù)

p_PageNo

int,

--當(dāng)前頁碼,從

1

開始

p_SqlSelect

varchar2,

--查詢語句,含排序部分

p_SqlCount

varchar2,

--獲取記錄總數(shù)的查詢語句

p_OutRecordCount

out

int,--返回總記錄數(shù)

p_OutCursor

out

ResultData)

as

v_sql

varchar2(3000);

v_count

int;

v_heiRownum

int;

v_lowRownum

int;

begin

----取記錄總數(shù)

execute

immediate

p_SqlCount

into

v_count;

p_OutRecordCount

:=

v_count;

----執(zhí)行分頁查詢

v_heiRownum

:=

p_PageNo

*

p_PageSize;

v_lowRownum

:=

v_heiRownum

-

p_PageSize

+1;

v_sql

:=

'SELECT

*

FROM

(

SELECT

A.*,

rownum

rn

FROM

('||

p_SqlSelect

||')

A

WHERE

rownum

=

'||

to_char(v_heiRownum)

||

'

)

B

WHERE

rn

=

'

||

to_char(v_lowRownum)

;

--注意對rownum別名的使用,第一次直接用rownum,第二次一定要用別名rn

OPEN

p_OutCursor

FOR

v_sql;

end

sp_Page;

end

Tools;

如何在Oracle存儲過程中實(shí)現(xiàn)分頁

我以前寫過一個

PLSQL通用 分頁 Function,可以參考一下我的博客:

oracle存儲過程的分頁

調(diào)用的時候這樣

declare

ocur tespackage.test_cursor;

v_count int:=0;

v_pagecount int :=0;

v_out int;

begin

fenye('table1',20,1,v_count,v_pagecount,ocur);

loop

fetch ocur into v_out ;

exit when ocur%notfound ;

dbms_output.put_line('count='||v_count);

end loop;

end ;

/

oracle怎么實(shí)現(xiàn)分頁

因為Oracle數(shù)據(jù)庫沒有Top關(guān)鍵字,所以這里就不能夠像微軟的數(shù)據(jù)據(jù)那樣操作,這里有兩種方法:

一種是利用相反的。

PAGESIZE:每頁顯示的記錄數(shù)

CURRENTPAGE:當(dāng)前頁號

數(shù)據(jù)表的名字是:components

索引主鍵字是:id

select * from components where id not in(select id from components where rownum=(PAGESIZE*(CURRENTPAGE-1))) and rownum=PAGESIZE order by id;

如下例:

select * from components where id not in(select id from components where rownum=100) and rownum=10 order by id;

從101到記錄開始選擇,選擇前面10條。

使用minus,即中文的意思就是減去,呵呵,這語句非常的有意思,也非常好記

select * from components where rownum=(PAGESIZE*(CURRENTPAGE-1)) minus select * from components where rownum=(PAGESIZE*(CURRENTPAGE-2));

如例:select * from components where rownum=10 minus select * from

一種是利用Oracle的rownum,這個是Oracle查詢自動返回的序號,一般不顯示,但是可以通過select rownum from [表名],可以看到,是從1到當(dāng)前的記錄總數(shù)。

select * from (select rownum tid,components.* from components where rownum=100) where tid=10;

oracle:寫一個用于分頁的存儲過程.調(diào)用的時候可以傳參

select

*

from

(select

a.*,rownum

r

from

(select

*

from

table_a)

a

where

rownum=b)

where

r=a

該sql語句實(shí)現(xiàn)了分頁查詢。

其中table_a表示你要查詢的那張表,r=a,rownum=b中的a和b表示需要查詢的記錄的起止數(shù)。

需要做分頁的話,上面的b可以改成currentPage*pageCount,a可以改成(currentPage-1)*pageCount,

currentPage表示當(dāng)前頁數(shù),pageCount表示總頁數(shù)

oracle做分頁查詢怎么做?

sql語句如下:

分頁1

SELECT *

FROM (Select ROWNUM AS ROWNO, T.*

from 表名 T(別名)

where 表字段 between to_date('20060501', 'yyyymmdd') and ?to_date('20060731', 'yyyymmdd')

AND ROWNUM = 20) TABLE_ALIAS

WHERE TABLE_ALIAS.ROWNO = 10;

經(jīng)過測試,此方法成本最低,只嵌套一層,速度最快,即使查詢的數(shù)據(jù)量再大,也幾乎不受影響,速度依然.

分頁2:

SELECT *

FROM (SELECT TT.*, ROWNUM AS ROWNO

FROM (Select t.*

? ? from 表名 T(別名)

? ? where flight_date between to_date('20060501', 'yyyymmdd') and

? ? ? ?to_date('20060531', 'yyyymmdd')

? ? ORDER BY FACT_UP_TIME, flight_no) TT(別名二)

WHERE ROWNUM = 20) TABLE_ALIAS

where TABLE_ALIAS.rowno = 10;

經(jīng)過測試,此方法隨著查詢范圍的擴(kuò)大,速度也會越來越慢,


文章名稱:oracle如何分頁存儲,oracle分頁的幾種方式
本文地址:http://weahome.cn/article/heddid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部