我在Oracle中使用INSERT ALL
语句将数据插入两个不同的表中。数据来自一个相当复杂的子查询而不是VALUES
子句。
我的问题是我不想将子查询返回的列全部插入到两个表中。
举一个简单的例子,假设我有两个表tab1
和tab2
,每个表包含三列col1
,col2
和col3
。
现在假设我的子查询返回一行,其值为A
,B
和C
。
所以,我希望A
,B
和C
分别插入col1
的{{1}},col2
和col3
,但我希望只有tab1
和A
进入C
的{{1}}和col1
。
我的陈述看起来像这样:
col3
有没有办法可以使用某种“填充物”或“垃圾栏”来实现我的目标?
答案 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;