有个user表
mysql这样查,用来分页,5 8是传入的参数
select * from user limit 5,8;这个sql,在oracle中怎么写呢
mysql这样查,用来分页,5 8是传入的参数
select * from user limit 5,8;这个sql,在oracle中怎么写呢
解决方案 »
- 请教各位高手,如何只读一张跨表空间的表在某一个表空间的数据。
- 建job时报错 ORA-01008 并非所有变量都已绑定
- 求sql 在线等
- 在LINUX-x86-64bit系统上安装BW3.5,安装到数据库时执行./runInstaller 后安装到18%时就卡住不动了
- 按月分组查询的问题,各位前辈帮帮小弟吧!
- 哪位牛人给帮我把这个sqlserver的触发器翻译成oracle的?
- 我怎么取得日期型数据的月啊
- 请教数据实例与数据库的区别
- 如何从一个dmp文件中提取一个表并以dbf文件存储?
- 关于 采用 pfile 和spfile
- 求oracle中国用户组论坛邀请码
- 索引查询需要什么条件,下面答案是B
select t.*
from(
select s.*,rownum rn
from s_user s ) t
where t.rn between 5 and 8
用于分页的方法
TABLE_NAME_IN 表名(只支持单表,多表时请用视图封装)
SQL_WHERE 条件语句 例如 : where n_xh < 200
SQL_ORDERBY order by 语句 例如 : order by n_xh desc
IDX_PAGE_IN 请求的页数
CURR_PAGE_COUNT_IN 每页的行数
return 结果集动态游标 包含表或者视图中的所有字段 加上下列5个字段
行序号 PROW
当前页数 dqys 没有数据时 为 0
总页数 zys 没有数据时 为 0
每页个数 mygs 没有数据时 为 0
总个数 zgs 没有数据时 为 0
*/
FUNCTION CURRENT_PAGE(TABLE_NAME_IN IN VARCHAR2,
SQL_WHERE IN VARCHAR2,
SQL_ORDERBY IN VARCHAR2,
IDX_PAGE_IN NUMBER,
CURR_PAGE_COUNT_IN NUMBER) RETURN SYS_REFCURSOR IS
CURR_ORDERBY_V VARCHAR2 (2000) ; --动态SQL的orderby条件语句
CURR_SQL_V VARCHAR2 (20000) ; --分页语句动态SQL
CURR_COUNT_SQL_V VARCHAR2 (20000) ; --封装了查询数量SQL
CURR_NONEDATA_SQL_V VARCHAR2 (2000) := 'SELECT 0 AS DQYS , 0 AS ZYS , 0 AS MYGS , 0 AS ZGS FROM DUAL '; --没有数据时返回结果集的SQL
PAGE_NOW_N NUMBER ; --当前页数
PAGE_SUM_N NUMBER ; --总页数
PAGE_DATA_EVERYCOUNT_N NUMBER ; --每页个数
PAGE_DATA_SUM_COUNT_N NUMBER ; --总个数
MIN_IDX_N NUMBER ; --最小开始序号
RS_REFCUR SYS_REFCURSOR ; --结果集返回游标
BEGIN
CURR_COUNT_SQL_V := 'SELECT COUNT(*) AS GS FROM '||TABLE_NAME_IN||' TT '||SQL_WHERE ;
BEGIN
EXECUTE IMMEDIATE CURR_COUNT_SQL_V INTO PAGE_DATA_SUM_COUNT_N ; --得到总个数
EXCEPTION --表或视图不存在错误截获
WHEN OTHERS THEN
PAGE_DATA_SUM_COUNT_N := 0 ;
END ;
IF PAGE_DATA_SUM_COUNT_N = 0 THEN
CURR_SQL_V := CURR_NONEDATA_SQL_V ;
ELSE
IF SQL_ORDERBY IS NOT NULL THEN
CURR_ORDERBY_V := SQL_ORDERBY || ', ROWID DESC ' ; --ORDER BY 后面加上rowid排序,防止分页语句bug
END IF ;
IF CURR_PAGE_COUNT_IN IS NULL OR CURR_PAGE_COUNT_IN = 0 THEN
PAGE_DATA_EVERYCOUNT_N := 20 ; --默认为每页20条
ELSE
PAGE_DATA_EVERYCOUNT_N := CURR_PAGE_COUNT_IN ;
END IF ;
PAGE_SUM_N := FLOOR (PAGE_DATA_SUM_COUNT_N/PAGE_DATA_EVERYCOUNT_N) ; --小数点截掉
IF PAGE_DATA_SUM_COUNT_N MOD PAGE_DATA_EVERYCOUNT_N <> 0 THEN --判断总数和页面个数是否可以整除,如果不可以整除则总页数加1
PAGE_SUM_N := PAGE_SUM_N +1 ;
END IF ;
PAGE_NOW_N := NVL(IDX_PAGE_IN,1) ; --当前页码
IF PAGE_NOW_N > PAGE_SUM_N THEN --如果当前页数大于总页数 那么使当前页数等于总页数
PAGE_NOW_N := PAGE_SUM_N ;
END IF ;
MIN_IDX_N := (PAGE_NOW_N - 1)*PAGE_DATA_EVERYCOUNT_N ; --结果集最小开始rownum
--封装语句
CURR_SQL_V := 'SELECT '||PAGE_NOW_N||' AS DQYS , '||PAGE_SUM_N||' AS ZYS , '||PAGE_DATA_EVERYCOUNT_N||' AS MYGS , '||PAGE_DATA_SUM_COUNT_N||' AS ZGS , FYB.*
FROM
(
SELECT ROWNUM AS PROW , TTT.* FROM
(SELECT TT.*
FROM '||TABLE_NAME_IN||' TT '
||SQL_WHERE||' '||CURR_ORDERBY_V||'
)TTT
)
FYB
WHERE FYB.PROW>'||MIN_IDX_N||' AND ROWNUM <='||PAGE_DATA_EVERYCOUNT_N;
END IF ;
OPEN RS_REFCUR FOR CURR_SQL_V ; --打开动态游标
RETURN RS_REFCUR ; --返回
END CURRENT_PAGE;
select * from (
select t.*,rownum rn from table t where rownum <= 5 ) tt
where tt.rn >= 8;