-----试验一.无条件的INSERT ALL
insert all
into my_emp(ename) values(object_value)
into my_dept(dname) values(object_value)
else
into my_other
select * from my_object
-----试验二.有条件的INSERT ALL
---1.登录system用户创建自己的emp,dept表,清空数据,备用
CREATE table leon.my_emp as select * from scott.emp
CREATE table leon.my_dept as select * from scott.dept
delete from my_emp
SELECT *FROM my_emp
delete from my_dept
SELECT *FROM my_dept
---2.创建插入数据源表my_object,表my_other适用于else插入用的
CREATE table my_object(
object_type varchar2(20),
object_value varchar2(30)
)
CREATE table my_other(
object_type varchar2(20),
object_value varchar2(30)
)
---为my_object插入数据,后查询结果
SQL> select * from my_object;
OBJECT_TYPE OBJECT_VALUE
-------------------- ------------------------------
emp liangcq
emp 无名
emp 小贩
dept 软开
dept 电信
dept 电力
dept 政府
dept 商用
emp 兴勇
emp 亮仔
emp 耗子
OBJECT_TYPE OBJECT_VALUE
-------------------- ------------------------------
emp 彬哥
sale 10000
sale 45000
other neusoft
已选择15行。
-----有条件的INSERT ALL
insert all
when (object_type='emp') then
into my_emp(ename) values(object_value)
when (object_type='dept') then
into my_dept(dname) values(object_value)
select * from my_object
---也可以加上else
SQL> insert all
2 when (object_type='emp') then
3 into my_emp(ename) values(object_value)
4 when (object_type='dept') then
5 into my_dept(dname) values(object_value)
6 else
7 into my_other
8 select * from my_object;
已创建15行。
SQL> select count(*) from my_emp;
COUNT(*)
----------
7
SQL> select count(*) from my_dept;
COUNT(*)
----------
5
SQL> select count(*) from my_other;
COUNT(*)
----------
3
SQL> select count(*) from my_object where object_type='emp';
COUNT(*)
----------
7
SQL> select count(*) from my_object where object_type='dept';
COUNT(*)
----------
5
-------------------------------------------------
-----试验三.有条件的INSERT FIRST和INSERT ALL的比较
--------------------------------------------------------------------------------------------------------
---试验思路:
----1. 创建3个测试表a_test、b_test、c_test,和插入数据来源表 data_test,并给数据来源表加入测试数据
---- 测试数据用1至9,a到i来表示,直观。
----2.测试语句 : 条件 INSERT ALL,用id来作为条件,与查询比较a_test、b_test中的数据个数和数据项
----3.测试语句 : 条件 INSERT FIRST,用id来作为条件,与INSERT ALL查询比较a_test、b_test中的数据个数和数据项
--------------------------------------------------------------------------------------------------------
----1. 创建3个测试表a_test、b_test、c_test,和插入数据来源表 data_test,并给数据来源表加入测试数据
SQL> create table a_test(
2 id number(4),
3 name varchar2(20)
4 );
表已创建。
SQL> create table b_test(
2 id number(4),
3 name varchar2(20)
4 );
表已创建。
SQL> create table c_test(
2 id number(4),
3 name varchar2(20)
4 );
表已创建。
SQL> create table data_test(
2 id number(4),
3 name varchar2(20)
4 );
表已创建。
----创建测试数据后,data_test中的数据
SQL> select * from data_test;
ID NAME
---------- --------------------
1 a
2 b
3 c
4 d
5 e
6 f
7 g
8 h
9 i
已选择9行。
----2.测试语句 : 条件 INSERT ALL,
SQL> insert all
2 when (id>2) then
3 into a_test
4 when (id<6) then
5 into b_test
6 else
7 into c_test
8 select * from data_test;
已创建12行。
SQL> select * from c_test;
未选定行
SQL> select * from a_test;
ID NAME
---------- --------------------
3 c
4 d
5 e
6 f
7 g
8 h
9 i
已选择7行。
SQL> select * from b_test;
ID NAME
---------- --------------------
1 a
2 b
3 c
4 d
5 e
----3.测试语句 : 条件 INSERT FIRST,
SQL> rollback ;
回退已完成。
SQL> insert first
2 when (id>2) then
3 into a_test
4 when (id<6) then
5 into b_test
6 else
7 into c_test
8 select * from data_test;
已创建9行。
SQL> select * from a_test;
ID NAME
---------- --------------------
3 c
4 d
5 e
6 f
7 g
8 h
9 i
已选择7行。
SQL> select * from b_test;
ID NAME
---------- --------------------
1 a
2 b
SQL> select * from c_test;
未选定行
----------------------------------------------------------------------------------------------------------------------------
试验结论:对于INSERT ALL, 满足第一个条件(即id>2),将id>2的数据取出;
当遇到第二个条件(id<6)时,又重新将满足i<6的数据取出。
而INSERT FIRST则不是,当第一个条件(即id>2)取出数据后,
再次遇到第二个条件(id<6)时,是在1到2两个数上去id小于6的,
而不是1到9上取。
换句话说,
对于INSERT ALL,插入第一张表的数据,如果满足第二张表的条件,也会插入。
而INSERT FIRST不然,满足第一条插入条件的数据是不会进行随后的判断的
----------------------------------------------------------------------------------------------------------------------------
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21684882/viewspace-671715/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/21684882/viewspace-671715/