1. sql语句提取分页记录数
说明:主要是处理单个表、视图的分页说明
下面操作主要是说明over的使用,如果要进行分页高效的采用下面任意sql,数度都比较快。当然也可以对使用系列的id直接进行提取,前提是不删除或每次重写修改系列id。
select X.*
from(
select row_number() over(order by empno desc) as ROW_NO, emp.*from emp) X
where X.ROW_NO <= 10
and X.ROW_NO >= 1;
select X.*
from (select
row_number() over(order by emp.ODRM021_ORGID) as ROW_NO, emp.*
from ODRM021_AUTOORG emp) X
where X.ROW_NO <= 57320010
and X.ROW_NO >= 57320000;
--该语句只适合数据量少于1000000记录,
--100000 99000, 1001 65.548
--1000000 999900,101 95.126
--57320010 57320000,超过2分钟,而且temp空间消耗过快
下面是从表至上倒下提取记录,数度也是非常的快,不到2秒钟 *推荐使用*
SELECT /*+ FIRST_ROWS */ * FROM
(SELECT A.*, ROWNUM RN FROM (SELECT /*+ FIRST_ROWS */* FROM PSID110_MSLIPBUF) A
WHERE ROWNUM <= 1000000)
WHERE RN >= 999990 (order by RN desc)
select u.* --数度比上面的语句稍微快几百毫秒
from( select rownum r_,c.* from PSID110_MSLIPBUF c where
rownum <=1349990+10 )u
where u.r_ between 1349990 and 1349990+10
order by u.r_ (desc)
2. 分页实战代码
包
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
PROCEDURE prc_query
( p_tableName in varchar2, --表名,该表最好已经得到或处理得到的统计表,这样便于该存储过程的更高效执行
p_tableColum in varchar2, --表列