oracle的多表插入

2021-04-15 18:51:17 字數 2758 閱讀 5508

q5,oracle的多表插入操作。在業務處理過程中,經常會碰到將業務資料按照條件分別插入不同的資料表的問題,按照傳統的處理方式,需要分條件執行多次檢索後分別插入不同的表單,這樣因為執行了重複的檢索造成cpu和記憶體的浪費,從oracle9i開始引入了insert all關鍵字支援將某張表的資料同時插入多張表單。語法如下:

insert all insert_into_clause [value_clause] subquery;

insert conditional_insert_clause subquery;

如上所示,insert_into_clause用於指定insert子句;value clause用於指定值子句;subquery用於指定提供資料的子查詢;condition_insert_clause用於指定insert條件子句。

當使用all操作符執行多表插入時,在每個條件子句上都要執行into子句後的子查詢,並且條件中使用的列必須在插入和子查詢的結果集中:

--建立測試用表

create

table

tdate( id

varchar2(10

), name

varchar2(20

), birthday

date

default

sysdate );

--插入資料

insert

into

tdate

values(1

,'zhangsan'

,to_date(

'1980-05-10'

,'yyyy-mm-dd'

));

insert

into

tdate

values(1

,'zhangsan'

,to_date(

'1980-05-10'

,'yyyy-mm-dd'

));

insert

into

tdate

values(2

,'lisi'

,to_date(

'1980-05-10'

,'yyyy-mm-dd'

));

insert

into

tdate

values(3

,'wangwu'

,default);

insert

into

tdate(id,

name

) values(4

,'zhangsan');

commit;

--建立接收用測試表

create

table

tdate1

asselect

* from

tdate

where1=

0;create

table

tdate2

asselect

* from

tdate

where1=

0;commit;

--使用

all關鍵字執行多表插入操作

insert

all

when

birthday >

'01-1

月-08'

then

into

tdate1

when

birthday <

'01-1

月-08'

then

into

tdate2

when

name

= 'zhangsan'

then

into

tdate1

when

name

= 'lisi'

then

into

tdate2

select

* from

tdate;

在上述操作語句中,如果原表tdate中存在既滿足

birthday > '01-1

月-08'

又滿足name = 'zhangsan'

的資料,那麼將執行兩次插入。而使用

first

關鍵字就可以避免這個問題。使用

first

關鍵字時,如果有記錄已經滿足先前條件,並且已經被插入到某個表單中(未必非要是同乙個表),那麼該行資料在後續插入中將不會被再次使用。也就是說使用

first

關鍵字,原表每行資料按照執行順序只會被插入一次。

insert

first

when

birthday >

'01-1

月-08'

then

into

tdate1

when

birthday <

'01-1

月-08'

then

into

tdate2

when

name

= 'zhangsan'

then

into

tdate1

when

name

= 'lisi'

then

into

tdate2

select

* from

tdate;

oracle多表插入

發表 csdn 日期 20090828 在oracle中關於多表插入的有四種分別是 1.無條件的多表insert all 2.帶條件的多表insert all 3.帶條件的多表insert first 4 pivoting insert 語法 insert all first when condit...

oracle 多表插入

建立表 create table tb user id integer primary key,user name varchar2 20 not null,user age integer not null create sequence seq user increment by 1 start...

oracle實現同時多表插入

oracle實現同時多表插入 最簡單的,一條select結果向多個表中插入 insert all into test1 id,name,cj into test2 id,name,cj into test3 id,name,cj select id,name,cj from test 依據條件實現 ...