ROWNUM的问题

时间:2010-02-26 09:51:20

标签: sql oracle

我有一个观点。其中一个视图的列包含NVL函数(如nvl(col1,col2) colA)。 如果我对此进行查询,我将显示一些记录

例如:select calA from view1;

如果我使用与内联视图相同的查询,我在where子句中使用rownum它什么都不显示

例如:Select * from (select calA from view1) where rownum <10;

如果我

,我会得到相同的记录
  • 在where子句
  • 中尝试没有rownum
  • 从视图中删除nvl

2 个答案:

答案 0 :(得分:0)

看起来你还有其他一些问题。

我尝试了以下操作,您的SELECT工作正常(返回9行):

CREATE TABLE test_data (col1 INT, col2 INT);

INSERT INTO test_data (
  SELECT CASE WHEN MOD(ROWNUM,2) = 1 THEN
                NULL
              ELSE
                ROWNUM/2
              END col1,
         ROWNUM col2
  FROM dual
  CONNECT BY ROWNUM <= 20
);

CREATE OR REPLACE VIEW view1 AS (
  SELECT NVL(col1, col2) calA FROM test_data
);

SELECT * FROM (SELECT calA FROM view1) WHERE ROWNUM <10;

您能否发布您的观点来源,表格设计以及有关您数据的更多信息?

答案 1 :(得分:0)

这不应该导致问题:

where rownum < 10

但由于生成ROWNUM的方式, 会导致无法返回任何行:

where rownum > 10
          -- ^ Greater than