PL / SQL:将数据从Prod移动到Dev Table

时间:2012-09-12 18:15:32

标签: sql oracle oracle11g

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

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

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

Oracle中的ROWNUM永远不应该被比较为大于(&gt;)。

当您查询时,Oracle会将这些行编号为“他们已返回”,因此您甚至无法说出

where rownum > 1

因为丢弃行会忽略它们。也就是说,在上面的例子中,从来没有ROWNUM = 1,你根本就没有数据。

答案 1 :(得分:1)

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

SELECT *
    FROM
     (SELECT a.*, rownum rn FROM
         (SELECT * FROM prod_schema.prod_table ORDER BY ID ASC) a WHERE rownum <= 107161)
    WHERE rn >= 50001;

答案 2 :(得分:0)

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

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