2012-04-10 32 views
2

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

我的问题是,我不希望插入子查询返回到这两个表中的所有列。

作为一个简单的例子,假设我有两个表tab1tab2各自含有三列col1col2col3

现在假设我的子查询返回值为ABC的单行。

所以,我想ABC分别插入col1col2tab1col3,但我想,说,只有AC进入col1tab2col3

我的发言会是这个样子:

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'条款的一种方式? – 2012-04-10 17:51:40

+0

@Isaac,没有'values'子句,它如何知道select中的哪些列要分配给目标表中的每一列? – 2012-04-11 02:29:55