Oracle SQL Developer功能不起作用

时间:2016-07-02 10:39:18

标签: sql oracle

我无法理解为什么某些功能在我的Oracle sql Developer中无效。我试图选择行号2,但Oracle只返回一个空行。

但是当我使用行号1时,Oracle返回第一行,如果我指定行号< = 2,则Oracle返回第1行和第2行。反之亦然,行号> = 2顺便说一句FETCH和偏移返回错误

select * 
from PAS.TRANSACTION 
where msisdn in ('1112684179') 
  and rownum = 2 
order by INSERTION_DATE DESC;

1 个答案:

答案 0 :(得分:0)

它不起作用是因为:对于第一行,它针对ROWNUM的{​​{1}}进行了测试,在这种情况下,1为false,并且该行被丢弃。由于该行已被废弃,因此未分配ROWNUM = 2,而是针对ROWNUM ROWNUM的同一1测试下一行;循环重复,ROWNUM = 2为假,行被丢弃。重复,恶心和所有行都未通过WHERE测试并被丢弃。

如果你想获得第二行,那么你需要在内联视图中为每一行分配一个ROWNUM,然后在处理完之后再选择第二行。

SELECT *                             -- Finally, in the outer select get
                                     -- the 2nd row
FROM   (
  SELECT t.*,                        -- Second, having ordered the rows
         ROWNUM AS rn                -- then generate the row numbers
  (
    select *                         -- Fisrt, in the inner-most inline
    from   PAS.TRANSACTION           -- view, select the rows you want
    where  msisdn in ('1112684179')  -- and apply the order.
    order by INSERTION_DATE DESC
  )
)
WHERE  rn = 2;

(另请注意,{<1}}伪列是在生成之前生成的 - 所以如果您希望它先订购,然后根据该订购编号然后你需要在内联视图中订购并在下一步生成ROWNUM - 如上例所示。)