insert all官方文档解释:
/*
多表插入语句的限制条件:
1. 只能对表执行多表插入语句,不能对视图或物化视图执行;
2. 不能对远端表执行多表插入语句;
3. 不能使用表集合表达式;
4. 不能超过999个目标列;
5. 在RAC环境中或目标表是索引组织表或目标表上建有BITMAP索引时,多表插入语句不能并行执行;
6. 多表插入语句不支持执行计划稳定性;
7. 多表插入语句中的子查询不能使用序列。
*/
第一步:准备数据
CREATE TABLE t1(product_id NUMBER, product_name VARCHAR2(80),MONTH NUMBER);
INSERT INTO t1 VALUES(111, '苹果',1);
INSERT INTO t1 VALUES(222, '橘子',1);
INSERT INTO t1 VALUES(333, '香蕉',1);
第二部:insert all
INSERT ALL
INTO t2
VALUES (product_id, product_name,MONTH)
INTO t2
VALUES (product_id, product_name,MONTH+1)
INTO t2
VALUES (product_id, product_name,MONTH+2)
INTO t2
VALUES (product_id, product_name,MONTH+3)
SELECT product_id, product_name, MONTH
FROM t1;
这里的表t2的数据下面会用到
---------------------------------------------------------------------------
第三步:有条件的insert all
insert all
when month=1 then
into t3
when month=2 then
into t4
else
into t5
select product_id,product_name,month from t2;
commit;
-------------------------------------------------------------------------
第四部:insert first (需要讲解下)
insert first
when month=1 then
into t3 VALUES(product_id,product_name,month)
when product_id=111 then
into t4 VALUES(product_id,product_name,month)
else
into t5 VALUES(product_id,product_name,month)
select product_id,product_name,month from t2;
commit;
--------------------------------------------------------------------------
根据第二部,t2表的数据做测试。
查询t4表发现:少了一条 111 苹果 1
111 苹果2
111 苹果 3
111 苹果 4
总结:insert first 当数据满足第一when 条件的时候,不会作用在下面的when条件了,
简而言之:当一条数据满足条件后,即使满足后面的条件也不会插入数据库。
正常情况:如果数据满足所有的when条件,每个表都会插入该条数据,insert first
数据只会插入一个表。
完毕
告诉自己你是最棒的!!!!!!