帮忙翻译下列oracle查询语句为一般的sql语句并顺便解释下
SELECT a.* FROM (SELECT ROWNUM AS RO,OP.* FROM OP) A,(SELECT ROWNUM AS RO ,OP FROM OP) B WHERE A.RO = B.RO + :n AND ROWNUM < 11
是关于分页的
rownum 和op是什么意思啊 ()里面是不是两个集合连接的意思啊
[解决办法]
猜测 第二个子查询的SELECT字段 应该和第一个的一样
也就是 应该是:
SELECT a.* FROM (SELECT ROWNUM AS RO,OP.* FROM OP) A,(SELECT ROWNUM AS RO ,OP.* FROM OP) B WHERE A.RO = B.RO + :n AND ROWNUM < 11
原句估计写错了
[解决办法]
一个分页存储过程 procedure sp_Page(p_PageSize int, --每页记录数 p_PageNo int, --当前页码,从 1 开始 p_SqlSelect varchar2, --查询语句,含排序部分 p_SqlCount varchar2, --获取记录总数的查询语句 p_OutRecordCount out int,--返回总记录数 p_OutCursor out sys_refcursor) 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;
[解决办法]
SELECT a.*
FROM (SELECT ROWNUM AS RO,
tmpsms.*
FROM tmpsms) A,
(SELECT ROWNUM AS RO ,
lot_no
FROM tmpsms) B
WHERE A.RO = B.RO + :n
AND ROWNUM < 11;
--------------------------
:n 已翻过的行数 也就是 count_per_page * (page_index - 1)
rownum是oracle的一个内置值,标示记录行数.可以理解为结果集序号.
在oracle中最常用的是 rownum < N,或者rownum = 1,其他的基本得不出结果.
OP应该是表名.
[解决办法]
oracle写分页时用rownum,具体取哪些行要事先算出来;
看hibernate的资料是这么写的:
select * from (select * from (select rownum as ro,table.* from table ) where ro<:l1) where ro >:l2;
据说这么写执行效率比较高,具体原因是什么没研究;你可以参考一下
反正我以前是这么写的
select * from (select rownum as ro,table.* from table ) where ro<:l1 and ro >:l2;
其中l1 和 l2 是具体的行数