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/