insert first&insert all的區別

insert first/all

 

利用insert first/all使得INSERT語句可以同時插入多張表,還可以根據判斷條件來決定每條記錄插入到哪張或哪幾張表中。

insert first/all語法
[ ALL | FIRST ]
WHEN condition THEN insert_into_clause [values_clause]
[insert_into_clause [values_clause]]...
[WHEN condition THEN insert_into_clause [values_clause]
[insert_into_clause [values_clause]]...
]...
[ELSE insert_into_clause [values_clause]
[insert_into_clause [values_clause]]...
]

insert first/all 是對每一行來進行判斷
兩者區別:
insert first:對於每一行數據,只插入到第一個when條件成立的表,不繼續檢查其他條件。
insert all :對於每一行數據,對每一個when條件都進行檢查,如果滿足條件就執行插入操作。

 

create table test_a(a number,b number);
create table b as select * from test_a;
create table c as select * from test_a;


insert into test_a values(1,0);
insert into test_a values(1,1);
insert into test_a values(1,2);
insert into test_a values(2,0);
insert into test_a values(3,0);

SQL> select * from test_a;

         A          B
---------- ----------
         1          0
         1          1
         1          2
         2          0
         3          0
        
現分別對insert first和insert all語句進行簡單測試:(佔不考慮SQL是否具有真實作用)      

 

SQL> insert all
  2  when a=1 then  into b
  3  when a=1 then  into c
  4  select * from test_a;

6 rows created.

Elapsed: 00:00:00.01
SQL> select * from b;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.00
SQL> select * from c;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.01
SQL> rollback;

Rollback complete.

Elapsed: 00:00:00.01
SQL> select * from b;

no rows selected

Elapsed: 00:00:00.00
SQL> select * from c;

no rows selected

Elapsed: 00:00:00.00
SQL> insert first
  2  when a=1 then  into b
  3  when a=1 then  into c
  4  select * from test_a;   

3 rows created.

Elapsed: 00:00:00.00
SQL>
SQL> select * from b;

         A          B
---------- ----------
         1          0
         1          1
         1          2

3 rows selected.

Elapsed: 00:00:00.00
SQL> select * from c;

no rows selected

Elapsed: 00:00:00.00

 

部分轉載自:http://lanying1982.blog.163.com/blog/static/23067748200810122341539/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章