oracle insert all 復合表插入

2021-09-20 20:19:07 字數 2505 閱讀 1759

insert all (復合表插入),是將乙個查詢結果同時插入多個表中的功能。使用insert all的好處是通過讀取一次源表就可以插入多張目標表,減少重複讀取的開銷。

語法:insert [all] [conditional_insert_clause]

[insert_into_clause value_clause] (subquery);

conditional_insert_clause is:

[all] [first]

[when condition then] [insert_into_clause value_clause]

[else] [insert_into_clause value_clause]

all:不考慮先後關係,只要滿足條件,就全部插入; 

first:考慮先後關係,如果有資料滿足第乙個when條件又滿足第二個when條件,則執行第乙個then插入語句,第二個then就不插入第乙個then已經插入過的資料了。 

其區別也可描述為,all只要滿足條件,可能會作重複插入;first首先要滿足條件,然後篩選,不做重複插入 

示例:1

2

3

4

5

6

7

insertall

whenc1<1000thenintosamall_ordersvalues(oid,c1,sid,cid)

whenc1 <2000thenintomedium_ordersvalues(oid,c1,sid,cid)

whenc1>2000andc1 <2900thenintolarge_orders vlaues (oid,c1,sid,cid)

elseintospecial_orders

selectoid,c1,sid,cid

fromorders;

指定insert first 當第乙個when條件成立時,執行該when條件後的語句,並且跳過後面的 when 子句(後面的when語句都不再考慮滿足第乙個when子句的記錄,即使該記錄滿足when語句中的條件)。 1

2

3

4

5

6

7

insertfirst

whenc1<1000thenintosamall_ordersvalues(oid,c1,sid,cid)

whenc1 <2000thenintomedium_ordersvalues(oid,c1,sid,cid)

whenc1>2000andc1 <2900thenintolarge_orders vlaues (oid,c1,sid,cid)

elseintospecial_orders

selectoid,c1,sid,cid

fromorders;

上面兩條語句區別在第二個when條件,insert all 中 第二個條件會插入orders 表中c1<2000的記錄,insert first 中第二個when條件會插入orders表中1000

Oracle 表分割槽 復合分割槽

oracle表分割槽 範圍分割槽 oracle.表分割槽 雜湊分割槽 oracle.表分割槽 列表分割槽 oracle.表分割槽 復合分割槽 oracle表分割槽 操縱已分割槽的表 範圍分割槽與雜湊分割槽或列表分割槽的組合 語法 partition by range column name1 sub...

鍊錶操作 頭插法尾插法

單鏈表的插入操作,包括頭插和尾插,兩種的時間複雜度都為o n 單鏈表插入操作 頭插 尾插 include include using namespace std 定義結點資料型別 typedef int elemtype 結點定義 typedef struct lnode lnode,linklis...

頭插法 尾插法建立鍊錶

鍊錶是線性表的一種,一般來說鍊錶就是一系列的儲存資料元素的單元通過指標串接起來形成的,常見的鍊錶是單鏈表和雙鏈表,乙個域用於資料元素的儲存,另乙個或兩個域是指向其他單元的指標。對於單鏈表來說,指標域是乙個,指向當前節點的後繼節點 雙鏈表來說,乙個指標域指向當前節點的後繼節點,另外乙個指標域指向當前節...