我想从oracle读取数百万条记录,并通过Java转移到另一个表。由于某些原因,我们正在使用Java流程。
我想问一下从表中选择记录的最佳方法,例如一次选择1000条记录。.rownum是好的还是在12c中获取/偏移?
例如,如果表有10000条记录,我可能会使用以下查询。
select *
from table
first 500 rows only -- first time
select *
from table
offset 500 next 500 rows only
...第二次(这是oracle再次获取1000条记录并将500行发送到Resultset ..)
select *
from table
offset 1000 next 500 rows only
...。这次是oracle再次获取1500条记录并将500行发送到resulset ...
...等等
所以我不确定最好的方法是Rownum一次选择500条记录还是偏移/获取方法...需要建议。
答案 0 :(得分:0)
您想从数据库#1的表中抽出数百万行,通过与Java应用程序的较低带宽连接将它们拉出,以便对它们进行按摩,然后想回头并推动相同的行建立相同的连接,将其粘贴到数据库2中-您能理解为什么这可能不是一个好选择吗? :-)
更好-在数据库#1中建立一个临时表,然后在填充临时表后,使用Oracle到Oracle数据库连接将数据从数据库#1推入数据库#2。
类似的东西:
Database #1
CREATE TABLE TEMP_TABLE AS
SELECT FIELD1,
FIELD2,
SUM(FIELD3) -- or whatever
FROM TABLE1
WHERE WHATEVER = SOMETHING_ELSE
GROUP BY FIELD1,
FIELD2
Run whatever PL/SQL procedures, etc, are needed to massage your data and make it
pretty.
Database #2
CREATE TABLE PRETTY_BRAND_NEW_TABLE AS
SELECT *
FROM TEMP_TABLE@db1;
根据我的经验,这是您最好的选择。 YMMV。
好运。