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
但是第二个查询并没有提取任何数据。
有什么想法吗?
答案 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 article:rownum
只有在一行进入结果集后才会被分配。所以where rownum > 1
永远不会返回任何行。
在单个选择(insert into / select * from
可能带有/*+ append */
提示,或使用CTAS)中执行此操作。或者使用expdp
/ impdp
:您可以使用REMAP_SCHEMA
选项更改架构名称(并可能根据您的Oracle版本限制所选集合)。