Быстрое копирование больших таблиц. Oracle DB.

Данный скрипт копирует данные из таблиц с большим объемом записей. Преимущество, что копирование идет порциями с промежуточным комитом. Набор полей курсора должен совпадать с набором полей таблицы назначения.

  1.  
  2. DECLARE
  3. -- ОБЪЯВЛЯЕМ КУРСОР
  4. CURSOR CUR IS
  5. SELECT * FROM <ТАБЛИЦА ИСТОЧНИК>;
  6. -- ПОЛЬЗОВАТЕЛЬСКИЙ ТИП НА ОСНОВАНИИ РЕЗУЛЬТИРУЮЩЕГО НАБОРА КУРСОРА
  7. TYPE T_FETCH_TABLE IS TABLE OF CUR%ROWTYPE;
  8. -- ОБЪЯВЛЯЕМ КОЛЛЕКЦИЮ С ПОЛЬЗОВАТЕЛЬСКИМ ТИПОМ
  9. L_ARRAY T_FETCH_TABLE;
  10. BEGIN
  11. -- ОТКРЫВАЕМ КУРСОР И В ЦИКЛЕ ЕГО ОБРАБАТЫВАЕМ
  12. OPEN CUR;
  13. LOOP
  14. -- ОТ КУРСОРА ОТКУСЫВАЕМ ПО #cc66cc;">1000 ЗАПИСЕЙ
  15. FETCH CUR BULK COLLECT
  16. INTO L_ARRAY LIMIT #cc66cc;">1000;
  17. -- ЕСЛИ НЕОБРАБОТАННЫЕ ЗАПИСИ ЗАКОНЧИЛИСЬ, ТО ЗАВЕРШАЕМ ЦИКЛ
  18. EXIT WHEN L_ARRAY.COUNT = #cc66cc;">0;
  19. -- БЫСТРАЯ ВСТАВКА ЗАПИСЕЙ В ТАБЛИЦУ
  20. FORALL I IN #cc66cc;">1 .. L_ARRAY.COUNT
  21. INSERT INTO <ТАБЛИЦА НАЗНАЧЕНИЯ> VALUES L_ARRAY(I);
  22. COMMIT;
  23. END LOOP;
  24. CLOSE CUR;
  25. EXCEPTION
  26. WHEN OTHERS THEN
  27. DBMS_OUTPUT.PUT_LINE('ОШИБКА!' || CHR(#cc66cc;">13) || CHR(#cc66cc;">10) || ' -> ' || SQLERRM);
  28.  
07:41
2.74K
Нет комментариев. Ваш будет первым!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.