multitable insert command

conn hr/hr

1,创建测试表

SQL> create table small_orders(order_id int, order_total number, sales_rep_id varchar2(4), customer_id varchar2(10));

Table created.

SQL> create table medium_orders(order_id int, order_total number, sales_rep_id varchar2(4), customer_id varchar2(10));

Table created.

SQL> create table large_orders(order_id int, order_total number, sales_rep_id varchar2(4), customer_id varchar2(10));

Table created.

SQL> create table orders(order_id int, order_total number, sales_rep_id varchar2(4), customer_id varchar2(10));

Table created.

 

2,插入测试数据:


insert into orders(order_id,order_total,sales_rep_id,customer_id) values(1,1000,'0001','0000000001');
insert into orders(order_id,order_total,sales_rep_id,customer_id) values(2,2000,'0002','0000000002');

insert into orders(order_id,order_total,sales_rep_id,customer_id) values(3,10000,'0003','0000000003');
insert into orders(order_id,order_total,sales_rep_id,customer_id) values(4,20000,'0004','0000000004');

insert into orders(order_id,order_total,sales_rep_id,customer_id) values(5,100000,'0005','0000000005');
insert into orders(order_id,order_total,sales_rep_id,customer_id) values(6,200000,'0006','0000000006');

 

3,有条件的多表插入(conditional insert all):

INSERT ALL
   WHEN order_total < 10000 THEN
      INTO small_orders
   WHEN order_total >= 10000 AND order_total < 100000 THEN
      INTO medium_orders
   WHEN order_total >=100000 THEN
      INTO large_orders
   SELECT order_id, order_total, sales_rep_id, customer_id
      FROM orders;

 

4,无条件多表插入

INSERT ALL
       INTO small_orders
      INTO medium_orders
      INTO large_orders
   SELECT order_id, order_total, sales_rep_id, customer_id
      FROM orders;

 

 

,5,Insert First

SQL> delete from small_orders;

2 rows deleted.

SQL> delete from medium_orders;

2 rows deleted.

SQL> delete from large_orders;

2 rows deleted.

 

INSERT FIRST
   WHEN ottl < 10000 THEN
      INTO small_orders
         VALUES(oid, ottl, sid, cid)
   WHEN ottl >= 10000 and ottl < 100000 THEN
      INTO medium_orders
         VALUES(oid, ottl, sid, cid)
   WHEN ottl >= 100000 THEN
      INTO large_orders
         VALUES(oid, ottl, sid, cid)
   SELECT order_id oid, order_total ottl, sales_rep_id sid, customer_id cid
      FROM orders;

 

6,The difference between insert all and insert first

INSERT ALL
   WHEN order_total < 1000000 THEN
      INTO small_orders
   WHEN  order_total < 1000000 THEN
      INTO medium_orders
   WHEN order_total >=10 THEN
      INTO large_orders
   SELECT order_id, order_total, sales_rep_id, customer_id
      FROM orders;

18 rows created.

三个表都将插入6条记录


INSERT FIRST
   WHEN order_total < 1000000 THEN
      INTO small_orders
   WHEN  order_total < 1000000 THEN
      INTO medium_orders
   WHEN order_total >=10 THEN
      INTO large_orders
   SELECT order_id, order_total, sales_rep_id, customer_id
      FROM orders;

6 rows created.

只有第一个表small_orders插入了6条记录,其他的两个表没有被插入记录。

 

从上面的两个例子可以看出INSERT FIRST与INSERT ALL的区别:
INSERT FIRST只检查第一个条件,如果第一个条件满足,虽然第二个条件也满足也不会去检查,除非第一个条件不满足的情况,才会检查第二个条件;
INSERT ALL则检查所有条件;

 

 

你可能感兴趣的:(insert,multitable)