1
Oracle 11g
Oracle SQL Developer 3.0.03

我需要将具有 +100K 行的生产表中的所有数据复制到开发表中。这些表有两种不同的模式。

我开始做:

select * 
  from prod_schema.prod_table 
 where ronum <= 50000 order by ID asc

然后做

select * 
  from prod_schema.prod_table 
 where ronum >= 50001 
   and rownum <=107161 order by ID asc

但是第二个查询没有提取任何数据。

有任何想法吗?

4

3 回答 3

2

Oracle 中的 ROWNUM 永远不应被比较为大于 (>)。

当您查询时,Oracle 在返回时对行进行编号,因此您甚至不能说

where rownum > 1

因为当行被丢弃时,它们会被忽略。也就是说,在上述情况下,永远不会有 ROWNUM=1 并且您根本没有得到任何数据。

于 2012-09-12T18:18:43.570 回答
1

ROWNUM在 oracle 中 使用大于 with 时,您可以使用以下查询:

SELECT *
    FROM
     (SELECT a.*, rownum rn FROM
         (SELECT * FROM prod_schema.prod_table ORDER BY ID ASC) a WHERE rownum <= 107161)
    WHERE rn >= 50001;
于 2012-09-12T18:24:11.540 回答
0

请参阅这篇文章rownum只有在一行进入结果集时才被分配。所以where rownum > 1永远不会返回任何行。

在单个选择中执行此操作(insert into / select * from可能带有/*+ append */提示,或使用 CTAS)。或使用expdp/ impdp:您可以使用该REMAP_SCHEMA选项来更改架构名称(并可能根据您的 Oracle 版本限制所选集)。

于 2012-09-12T18:20:19.320 回答