oracle中insert all的用法


oracle中insert all的用法

現在有個需求:將數據插入多個表中。怎么做呢?可以使用insert into語句進行分別插入,但是在oracle中有一個更好的實現方式:使用insert all語句。
insert all語句是oracle中用於批量寫數據的 。insert all分又為無條件插入和有條件插入。

一、表和數據准備

--創建表
CREATE TABLE stu(
   ID   NUMBER(3),
   NAME VARCHAR2(30),
   sex  VARCHAR2(2)
);

--刪除表
drop table stu;
drop table stu1;
drop table stu2;

--向stu表中插入數據
INSERT INTO stu(ID, NAME, sex) VALUES(1, '成都', '女');
INSERT INTO stu(ID, NAME, sex) VALUES(2, '深圳', '男');
INSERT INTO stu(ID, NAME, sex) VALUES(3, '上海', '女');

--復制表結構創建表stu1,stu2
CREATE TABLE stu1 AS SELECT t.* FROM stu t WHERE 1 = 2;
CREATE TABLE stu2 AS SELECT t.* FROM stu t WHERE 1 = 2;
--查詢表
select * from stu;
select * from stu1;
select * from stu2;

二、insert all無條件插入

將stu表中的數據插入stu1和stu2表中可以這樣寫

insert all
    into stu1 values(id,name,sex)
	into stu2 values(id,name,sex)
	select id,name,sex from stu;

三、insert all有條件插入

有條件插入又分為兩種:insert all when...和insert first when...

  • insert all when類型
insert all
    when id=1 then
	into stu1 values(id,name,sex)
	when id=2 then 
    into stu2	values(id,name,sex)
    else
	into stu1 values(id,name,sex)
	select id,name,sex from stu;

結果如下:

  • insert first when 類型
insert first
 when id<=2 then 
 into stu1 values(id,name,sex)
 when id<=3 then
 into stu2 values(id,name,sex)
 select id,name,sex from stu;

結果如下:

四、insert all和insert first的區別

insert first是考慮先后關系的,如果有數據滿足第一個when條件又滿足第二個when條件,則執行第一個then插入語句,第二個then就不插入。反之有數據不滿足第一個when條件且滿足第二個when條件,則數據會插入第二個條件下對應的表中,這也正是insert first與inset all的區別。
簡單來說就是all只要滿足條件,就會插入,這個會造成重復插入;first只要有一個滿足條件,后面的條件不再判斷,不會造成重復插入。
注意:insert all 無法支持序列插入,會導致兩邊不一致。

五、參考博文

(1) https://www.cnblogs.com/myrunning/p/4386004.html
(2) https://blog.csdn.net/ghostgant/article/details/5700228
(3) https://www.cnblogs.com/hrhguanli/p/3773020.html
(4) https://www.cnblogs.com/shoshana-kong/p/9340391.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM