Rownum или Fetch / offset позволяют выбрать и обработать миллион записей. - PullRequest
0 голосов
/ 16 сентября 2018

Я хотел бы прочитать миллион записей из оракула и перенести их в другую таблицу через Java.По какой-то причине мы используем процесс Java, мы идем так.

Я хотел бы попросить наилучший подход для выбора записей из таблиц для примеров 1000 записей за раз. Является ли rownum хорошим или Fetch / Offset in12c?

например, если таблица содержит 10000 записей, следующий за запросом, который я могу использовать.

select *
from table
first 500 rows only  -- first time

select *
from table
offset 500 next 500 rows only

... второй раз (Является ли на этот раз оракул снова 1000 записей и отправляет 500 строк вResultset ..)

select *
from table
offset 1000 next 500 rows only

.... Является ли на этот раз оракул снова получить 1500 записей и отправить 500 строк для результата ...

... и так далее

так что я не уверен, что Rownum выберет 500 записей за раз или метод смещения / выборки ... лучший совет ...

1 Ответ

0 голосов
/ 16 сентября 2018

Вы хотите вытащить миллионы строк из таблицы в базе данных № 1, перетащить их по соединению с относительно низкой пропускной способностью к приложению Java, чтобы вы могли массировать их, затем вы хотите развернуться и вытолкнуть те же строки Вверх по тому же соединению, чтобы вставить их в базу данных № 2 - понимаете ли вы, почему это не может быть хорошим выбором? : -)

Лучше - создайте временную таблицу в базе данных № 1, затем, как только ваша временная таблица заполнится, отправьте данные из базы данных № 1 в базу данных № 2, используя соединение с базой данных Oracle-Oracle.

Что-то вроде:

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.

Удачи.

...