Я не знаком с 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
Спасибо!