筆記主題:update更新多行資料(oracle)
更新日期:2013-07-25
說明:筆記總結了在工作中遇到過的幾種update方法和各種方法適用的範圍。
1.單錶更新
方案:使用標準update語法即可,執行穩定且效率較高
update table
set (column1,column2,...)=
value1,value2,...
;2.多表關聯更新
舉例:更新gkfq_rec表中所有slid與oa2_ftask表fi_inst相同的行,blzt字段值=oa2_ftask表的ft_lstate。
create table gkfq_rec (
slid char(12) parimary key,
blzt varchar2(50),
wjbt varchar2(100) not null,
create table oa2_ftask (
fi_inst char(12) parimary key,
fi_state int not null,
ft_lstate int not null,
方法描述
適用範圍
執行效率
傳統方案
一般情況適用
單錶更新效率高且穩定,多表時效率較慢
inline view更新法
關聯字段為主鍵
速度較快
merge更新法
關聯欄位非主鍵,適用於兩表關聯
非主鍵關聯表更新,速度較快
快速游標更新法
邏輯較複雜的情況
複雜邏輯時效率很高
(1)傳統方案(速度可能最慢)
update gkfq_rec a
set blzt=
(select b.ft_lstate from oa2_ftask b where a.slid=b.fi_inst)
where exists
(select 1 from oa2_ftask b where a.slid=b.fi_inst)
;//子查詢返回多行值時,通過where exists條件逐行過濾,一一匹配實現set唯一值
(2)inline view更新法(關聯主鍵字段,速度較快)
方案:更新乙個臨時建立的檢視。要求b表的主鍵字段必須在where條件中,並且是以=號來關聯被更新表,否則可能報錯:ora-01779:無法修改與非鍵值儲存表對應的列。當b表主鍵欄位為多列組合時,也有可能出現這一報錯。update (select a.blzt as blzt,b.ft_lstate as ft_lstate
from gkfq_rec a,oa2_ftask b where a.slid=b.fi_inst)
set blzt=ft_lstate
;(3)merge更新法(關聯欄位非主鍵時,速度較快)
語法:merge into table_name alias 1
using (table|view|sub_query) alias 2
on (join condition)
when matched then
update
set col1=col_val1,
col2=col_val2
when not matched then
insert (column_list) values (column_values);
方案:在alias2中select出來的資料,每一條都跟alias1進行on (join condition)比較,若匹配,就進行更新操作,不匹配,執行插入操作。merge不會返回影響行數,且最多只能兩表關聯,適用於連線條件不是主鍵的字段。
merge into gkfq_rec a
using oa2_ftask b
on (a.slid=b.fi_inst)
when matched then
update set a.blzt=b.ft_lstate;
(4)快速游標更新法(複雜邏輯時,效率很高)
語法:begin
for cr in (查詢語句) loop --迴圈
update table_name set ... --更新語句(根據查詢出來的結果集合)
end loop; --結束迴圈
end;
方案:配合oracle獨有的內建rowid物理字段,使用快速游標,不需要定義,直接把游標寫到for迴圈中,快速定位並執行更新。它可以支援複雜邏輯的查詢語句,更新準確,無論資料多大更新效率依然很高。但執行後不返回影響行數。
begin
for aa in (select a.rowid as rowid,b.ft_lstate as ft_lstate from gkfq_rec a,oa2_ftask b
where a.slid=b.fi_inst ) loop
update gkfq_rec set blzt=aa.ft_lstate
where rowid=aa.rowid;
end loop;
end;
在合適的情況下選擇多行Update方式
筆記主題 update更新多行資料 oracle 更新日期 2013 07 25 說明 筆記總結了在工作中遇到過的幾種update方法和各種方法適用的範圍。1.單錶更新 方案 使用標準update語法即可,執行穩定且效率較高 update table set column1,column2,valu...
在知道ip位址的情況下,求合適的子網掩碼
ip位址 ip address 的概念及其子網掩碼 subnet mask 的計算對於首次學習網路知識的初學者來說是一件比較困難的事情。下文所述是我看到別人的稍作修改的結果,希望可以幫到大家。按照目前使用的ipv4的規定,對ip位址強行定義了一些保留位址,即 網路位址 和 廣播位址 所謂 網路位址 ...
layoutSubviews在什麼情況下呼叫
1.在以下情況都會呼叫 注意 當view的size的值為0的時候,addsubview也不會呼叫layoutsubviews。當要給這個view新增子控制項的時候不管他的size有沒有值都會呼叫 2.先來看一下uiview的layoutsubviews在什麼情況下會呼叫 subview view s...