读书人

帮忙翻译下列oracle查询语句为一般的s

发布时间: 2012-03-13 11:21:11 作者: rapoo

帮忙翻译下列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

原句估计写错了
[解决办法]

SQL code
  一个分页存储过程  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 是具体的行数

读书人网 >.NET

热点推荐