insert/insert all/insert first详解

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

数据只会插入一个表。

完毕

告诉自己你是最棒的!!!!!!





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值