當前位置:首頁 » 存儲配置 » oracle存儲過程的分頁查詢

oracle存儲過程的分頁查詢

發布時間: 2022-09-14 04:56:41

⑴ 一個oracle的分頁查詢存儲過程,執行的時候報錯,如下:

默認值不能給 '', 因為oracle中 '' is null
不賦值的話,就是 '' 了。所以這一行的,報錯是說: 冒號出現沒有起到應有的作用。

⑵ oracle:寫一個用於分頁的存儲過程.調用的時候可以傳參

select
*
from
(select
a.*,rownum
r
from
(select
*
from
table_a)
a
where
rownum<=b)
where
r>=a
sql語句實現了分頁查詢。
其中table_a表示你要查詢的那張表,r>=a,rownum<=b中的a和b表示需要查詢的記錄的起止數。
需要做分頁的話,上面的b可以改成currentPage*pageCount,a可以改成(currentPage-1)*pageCount,
currentPage表示當前頁數,pageCount表示總頁數

⑶ oracle中建分頁查詢的存儲過程

資料庫中定義一個包,定義游標類型,比如可以這樣:
create or replace package package_name
as
type outcur is ref cursor;
end ;
然後存儲過程返回結果集:
create procere ttt( p_cur out package_name.outcur) as
begin open p_cur for
select ......;
end;

這樣就可以返回結果集了.
如果數據量太大,返回全部記錄再通過程序控制分頁意義不大,效率同樣太低,樓上的那個rownbr我沒聽過,只知道rownum,但這個偽列是不能滿足分頁要求的,如果數據量非常大,快速分頁的話可以考慮用rowid這個列,
試試
select rowid from 任意表;
能看出結果了吧.剩下的自己想辦法吧.

⑷ oracle union如何做分頁查詢

oracle中union無法做分頁查詢,需要用rownum來做分頁。

如emp表中有如下數據:

⑸ oracle做分頁查詢怎麼做

sql語句如下:

  • 分頁1

  1. SELECT *

  2. FROM (Select ROWNUM AS ROWNO, T.*

  3. from 表名 T(別名)

  4. where 表欄位 between to_date('20060501', 'yyyymmdd') and to_date('20060731', 'yyyymmdd')

  5. AND ROWNUM <= 20) TABLE_ALIAS

  6. WHERE TABLE_ALIAS.ROWNO >= 10;

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


  • 分頁2:

  1. SELECT *

  2. FROM (SELECT TT.*, ROWNUM AS ROWNO

  3. FROM (Select t.*

  4. from 表名 T(別名)

  5. where flight_date between to_date('20060501', 'yyyymmdd') and

  6. to_date('20060531', 'yyyymmdd')

  7. ORDER BY FACT_UP_TIME, flight_no) TT(別名二)

  8. WHERE ROWNUM <= 20) TABLE_ALIAS

  9. where TABLE_ALIAS.rowno >= 10;

    經過測試,此方法隨著查詢范圍的擴大,速度也會越來越慢,


⑹ oracle存儲過程的分頁

調用的時候這樣
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分頁查詢,一個select語句解決,不需要子查詢。

select column1, column2
from (select rownum recno, column1, column2
from table_name
order by column1)
where recno between N and N+10

不用子查詢似乎不可能,上面語句可以輸入參數實現分頁查詢,要不就食用存儲過程。

⑻ 求一個通用ORACLE存儲過程,實現分頁和查詢

create
or
replace
package
Tools
is
type
ResultData
is
ref
cursor;
procere
sp_Page(p_PageSize
int,
--每頁記錄數
p_PageNo
int,
--當前頁碼,從
1
開始
p_SqlSelect
varchar2,
--查詢語句,含排序部分
p_SqlCount
varchar2,
--獲取記錄總數的查詢語句
p_OutRecordCount
out
int,--返回總記錄數
p_OutCursor
out
ResultData);
end
Tools;
create
or
replace
package
body
Tools
is
procere
sp_Page(p_PageSize
int,
--每頁記錄數
p_PageNo
int,
--當前頁碼,從
1
開始
p_SqlSelect
varchar2,
--查詢語句,含排序部分
p_SqlCount
varchar2,
--獲取記錄總數的查詢語句
p_OutRecordCount
out
int,--返回總記錄數
p_OutCursor
out
ResultData)
as
v_sql
varchar2(3000);
v_count
int;
v_heiRownum
int;
v_lowRownum
int;
begin
----取記錄總數
execute
immediate
p_SqlCount
into
v_count;
p_OutRecordCount
:=
v_count;
----執行分頁查詢
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多條件查詢的分頁存儲如何操作

項目接近尾聲了源碼天空,感覺將業務邏輯放到Oracle中使得後台代碼很精簡,Oracle很有搞頭!PL\SQL:create or replace procere proc_client_List --客戶Oracle多條件查詢(pro_cursor out pkg_order.p_cursor, --查詢結果集characters_ in varchar2,--客戶性質states_ in varchar2,--客戶狀態type_ in varchar2,--客戶類型calling_ in varchar2,--客戶行業name_ in varchar2,--客戶名稱beginTime_ in date,--創建日期上限endTime_ in date,--創建日期上限area_ in number,--客戶地區clientsource_ in varchar2,--客戶來源importent_ in varchar2,--重要程度start_row in number,--結果集起始行end_row in number--結果集結束行) is sql_str varchar2(1000):= 'select * from ( select row_.*, rownum rownum_ from ( select * from clientinfo c where(:characters_ is null or c.characters like :characters_) and (:states_ is null or c.states like :states_) and (:type_ is null or c.type like :type_) and (:calling_ is null or c.calling like :calling_) and (:name_ is null or c.name like :name_) and (:beginTime_ is null or c.createtime > :beginTime_) and (:endTime_ is null or c.createtime < :endTime_) and (:area_ is null or c.area=:area_) and (:clientsource_ is null or c.clientsource like :clientsource_) and (:importent_ is null or c.importent like :importent_) ) row_ where rownum :start_row'; begin open pro_cursor for sql_str using characters_,'%'||characters_||'%', states_,'%'||states_||'%', type_,'%'||type_||'%', calling_,'%'||calling_||'%', name_,'%'||name_||'%', beginTime_,beginTime_, endTime_,endTime_, area_,area_, clientsource_,'%'||clientsource_||'%', importent_,'%'||importent_||'%', end_row,start_row; end proc_client_List; 上述的相關內容就是對Oracle多條件查詢的分頁存儲過程的描述,希望會給你帶來一些幫助在此方面。

⑽ oracle用游標分頁查詢學生所有信息

Oracle內分頁:
1.首先創建返回結果集的包,代碼如下:
--創建包
create or replace package types as
type cursorType is ref cursor;
end;12341234

2.創建實現分頁查詢的存儲過程:
--創建存儲過程
CREATE OR REPLACE PROCEDURE PROC_GET_DATA_PAGING(P_TABLENAME IN VARCHAR2, --表(視圖)名
P_STRWHERE IN VARCHAR2, --查詢條件
P_ORDERCOLUMN IN VARCHAR2, --排序的列
P_CURPAGE IN OUT NUMBER, --當前頁
P_PAGESIZE IN OUT NUMBER, --每頁顯示記錄條數
P_TOTALRECORDS OUT NUMBER, --總記錄數
P_TOTALPAGES OUT NUMBER, --總頁數
V_CUR OUT TYPES.CURSORTYPE) --返回的結果集
IS
V_SQL VARCHAR2(4000) := ''; --SQL語句
V_STARTRECORD NUMBER(10); --開始顯示的記錄條數
V_ENDRECORD NUMBER(10); --結束顯示的記錄條數
V_SHOWALL INTEGER; --是否顯示全部記錄
BEGIN
--記錄中總記錄條數
V_SQL := 'SELECT TO_NUMBER(COUNT(*)) FROM ' || P_TABLENAME ||
' WHERE 1=1 ';
IF P_STRWHERE IS NOT NULL OR P_STRWHERE <> '' THEN
V_SQL := V_SQL || P_STRWHERE;
END IF;
EXECUTE IMMEDIATE V_SQL
INTO P_TOTALRECORDS;

--驗證頁面記錄大小
IF P_PAGESIZE <= 0 THEN
V_SHOWALL := 1;
P_PAGESIZE := 0;
END IF;

IF V_SHOWALL IS NULL THEN
--根據頁大小計算總頁數
IF MOD(P_TOTALRECORDS, P_PAGESIZE) = 0 THEN
P_TOTALPAGES := TRUNC(P_TOTALRECORDS / P_PAGESIZE, 0);
ELSE
P_TOTALPAGES := TRUNC(P_TOTALRECORDS / P_PAGESIZE, 0) + 1;
END IF;

ELSE
P_TOTALPAGES := 1;

END IF;

--驗證頁號
IF P_CURPAGE < 1 THEN
P_CURPAGE := 1;
END IF;
IF P_CURPAGE > P_TOTALPAGES THEN
P_CURPAGE := P_TOTALPAGES;
END IF;

--實現分頁查詢
V_STARTRECORD := (P_CURPAGE - 1) * P_PAGESIZE + 1;
V_ENDRECORD := P_CURPAGE * P_PAGESIZE;
V_SQL := 'SELECT * FROM (SELECT A.*, ROWNUM R FROM ' ||
'(SELECT * FROM ' || P_TABLENAME;
IF P_STRWHERE IS NOT NULL OR P_STRWHERE <> '' THEN
V_SQL := V_SQL || ' WHERE 1=1 ' || P_STRWHERE;
END IF;
IF P_ORDERCOLUMN IS NOT NULL OR P_ORDERCOLUMN <> '' THEN
V_SQL := V_SQL || ' ORDER BY ' || P_ORDERCOLUMN;
END IF;
IF V_SHOWALL IS NULL THEN
V_SQL := V_SQL || ') A WHERE ROWNUM <= ' || V_ENDRECORD ||
') B WHERE R >= ' || V_STARTRECORD;
ELSE
V_SQL := V_SQL || ') A ) B ';
END IF;

DBMS_OUTPUT.PUT_LINE(V_SQL);
OPEN V_CUR FOR V_SQL;
END PROC_GET_DATA_PAGING;0414204142

一定要先創建返回結果集的包,否則編譯存儲過程有問題。

熱點內容
編譯代碼技巧 發布:2025-01-16 18:06:26 瀏覽:646
篷佩奧訪問中國 發布:2025-01-16 18:05:19 瀏覽:145
光遇如何用密碼登上賬號 發布:2025-01-16 18:01:26 瀏覽:245
class反編譯軟體 發布:2025-01-16 18:01:12 瀏覽:6
安卓手機推特叫什麼 發布:2025-01-16 17:55:32 瀏覽:210
linux下安裝mysql 發布:2025-01-16 17:54:58 瀏覽:630
c語言停留 發布:2025-01-16 17:51:13 瀏覽:959
一機一碼文件加密 發布:2025-01-16 17:36:19 瀏覽:415
軟體登錄密碼用戶名是什麼 發布:2025-01-16 17:11:52 瀏覽:111
我的世界建伺服器該注意什麼 發布:2025-01-16 17:06:40 瀏覽:568