oracle bulk insert

Я не знаком с PLSQL, но мне нужно выполнить массовую вставку для задачи.

Обычно мне нужно запросить первую таблицу, чтобы получить один столбец, а затем использовать его в другой таблице, чтобы вставить его. Примерно так:

for (ids in a file As cur_id)
{
Select DISTINCT column1 As col1_list from table1 where id=cur_id

for (cols in col1_list as cur_col)
  Insert into table2 values ('cur_id','cur_col','214','234','first 3 chars of cur_col')
}

Теперь у меня около 4k + id в файле, и каждый id будет иметь разный диапазон различных col1: Max: 165 миллионов, min ~ 2k

Я пытаюсь добиться этого: «Читать из одной таблицы и вставить в другой, используя массовую вставку ", это нормально, если это выполняется в течение ночи и т. д.

Я получил этот сценарий из некоторого исследования в Интернете:

CREATE OR REPLACE PROCEDURE test_proc
IS
TYPE TObjectTable IS TABLE OF ALL_OBJECTS%ROWTYPE;
ObjectTable$ TObjectTable;

BEGIN
   SELECT * BULK COLLECT INTO ObjectTable$
     FROM ALL_OBJECTS;

     FORALL x in ObjectTable$.First..ObjectTable$.Last
     INSERT INTO t1 VALUES ObjectTable$(x) ;
END;

Я думаю, что это может быть полезно в моем случае, но я не совсем понимаю семантику . Где я упоминаю column1 ... также для вставки значения выражаются как ObjectTable $ (x) вместо значений (.., .., ..).

Может ли кто-нибудь объяснить мне сценарий и помочь изменить его в соответствии с моим вариантом использования, используя переменные table1, table2, col1, ids и т. Д., Которые я упомянул в моем примере.

БД ​​10g

Спасибо!

6
задан codeObserver 9 December 2011 в 18:21
поделиться