оракул основная вставка - PullRequest
6 голосов
/ 09 декабря 2011

Я не знаком с 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 + идентификаторов в файле, и каждый идентификатор будет иметь различный диапазон различных col1: Макс: 165 миллионов, мин ~ 2k

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

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

БД 10g

Спасибо!

1 Ответ

5 голосов
/ 09 декабря 2011

Вам не нужно собирать всю массу вообще.Черт, вам даже не нужен PL / SQL - SQL также может выполнять массовую вставку!

просто создайте представление, соответствующее типу строки% вашей целевой таблицы

create view v_Table1_Table2 as
 (select   id,
           max(case when /* condition for column1 */ 
                    then /* expression for column1 */ 
                    else null; 
               end) as column1,
           max(case when /* condition for column2 */ 
                    then /* expression for column2 */ 
                    else null; 
               end) as column2,
           max(case when /* condition for column3 */ 
                    then /* expression for column3 */ 
                    else null; 
               end) as column3
  from     table1
  group by id
 )

затем

insert into table2 (select * from v_Table1_Table2 where id = :cur_id);
...