2012-04-10 2 views
2

Я использую оператор INSERT ALL в Oracle для вставки данных в две разные таблицы. Данные поступают из довольно сложного подзапроса, а не из предложения VALUES.Выбор столбцов в Oracle INSERT ALL Statement

Моя проблема в том, что я не хочу вставлять все столбцы, возвращаемые подзапросом в обе таблицы.

В качестве простого примера предположим, что у меня есть две таблицы tab1 и tab2 каждая из которых содержит три колонки col1, col2 и col3.

Теперь предположим, что мой подзапрос возвращает одну строку со значениями A, B и C.

Итак, я хочу A, B и C вставляется в col1, col2 и col3 из tab1 соответственно, но я хочу, скажем, только A и C идти в col1 и col3 из tab2.

Мое заявление будет выглядеть примерно так:

INSERT ALL 
INTO tab1 
    (col1, col2, col3) 
INTO tab2 
    (col1, ?, col3) 
FROM 
(... 
complex subquery which returns A, B, C 
    ... 
) 

Есть ли способ, что я могу использовать какую-то «наполнитель» или «мусорной рубрикой», чтобы позволить мне достичь своей цели?

ответ

8

Да:

INSERT ALL 
INTO tab1 
    (col1, col2, col3) values (a, b, c) 
INTO tab2 
    (col1, col3) values (a, c) 
SELECT a, b, c 
FROM 
(... 
complex subquery which returns A, B, C 
    ... 
) 
2

этот синтаксис можно

INSERT ALL 
INTO ap_cust(f1, f2) VALUES (a, d) 
INTO ap_orders(f1, f2, f3) VALUES (a, b, c) 
SELECT a, b, c,d 
FROM table; 

см http://psoug.org/reference/insert.html

+0

Есть ли способ сделать это без 'values' статей? –

+0

@ Исаак, без предложений 'values', как он будет знать, какие столбцы из списка выбрать для каждого столбца в целевых таблицах? –