Быстрое копирование больших таблиц. Oracle DB.
Данный скрипт копирует данные из таблиц с большим объемом записей. Преимущество, что копирование идет порциями с промежуточным комитом. Набор полей курсора должен совпадать с набором полей таблицы назначения.
DECLARE -- ОБЪЯВЛЯЕМ КУРСОР CURSOR CUR IS SELECT * FROM <ТАБЛИЦА ИСТОЧНИК>; -- ПОЛЬЗОВАТЕЛЬСКИЙ ТИП НА ОСНОВАНИИ РЕЗУЛЬТИРУЮЩЕГО НАБОРА КУРСОРА TYPE T_FETCH_TABLE IS TABLE OF CUR%ROWTYPE; -- ОБЪЯВЛЯЕМ КОЛЛЕКЦИЮ С ПОЛЬЗОВАТЕЛЬСКИМ ТИПОМ L_ARRAY T_FETCH_TABLE; BEGIN -- ОТКРЫВАЕМ КУРСОР И В ЦИКЛЕ ЕГО ОБРАБАТЫВАЕМ OPEN CUR; LOOP -- ОТ КУРСОРА ОТКУСЫВАЕМ ПО #cc66cc;">1000 ЗАПИСЕЙ FETCH CUR BULK COLLECT INTO L_ARRAY LIMIT #cc66cc;">1000; -- ЕСЛИ НЕОБРАБОТАННЫЕ ЗАПИСИ ЗАКОНЧИЛИСЬ, ТО ЗАВЕРШАЕМ ЦИКЛ -- БЫСТРАЯ ВСТАВКА ЗАПИСЕЙ В ТАБЛИЦУ INSERT INTO <ТАБЛИЦА НАЗНАЧЕНИЯ> VALUES L_ARRAY(I); COMMIT; END LOOP; CLOSE CUR; EXCEPTION WHEN OTHERS THEN END;