在Oracle INSERT ALL语句中选择选择列

时间:2012-04-10 16:55:30

标签: sql oracle

我在Oracle中使用INSERT ALL语句将数据插入两个不同的表中。数据来自一个相当复杂的子查询而不是VALUES子句。

我的问题是我不想将子查询返回的列全部插入到两个表中。

举一个简单的例子,假设我有两个表tab1tab2,每个表包含三列col1col2col3

现在假设我的子查询返回一行,其值为ABC

所以,我希望ABC分别插入col1的{​​{1}},col2col3 ,但我希望只有tab1A进入C的{​​{1}}和col1

我的陈述看起来像这样:

col3

有没有办法可以使用某种“填充物”或“垃圾栏”来实现我的目标?

2 个答案:

答案 0 :(得分:9)

是:

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
  ...
)

答案 1 :(得分: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