oracle update用法

來源:互聯網
上載者:User

註:update操作時,條件必須注意。不寫where即為更新全表,不想更新的會被賦空值。


單表更新:update tablename set col1=value where col2='value2';

多表關聯更新:update a set a.col1=(select b.col1 from b where a.col2=b.col2) where exists(select * from b where a.col2=b.col2); --exists條件必須要有,不然更新有誤

多欄位更新:update a set (a.col1,a.col2) = (select b.col1,b.col2 from b where b.col3=a.col3 and b.col4=value2) where exists (select 1 from b where b.col3=a.col3 and b.col4=value2);  --同樣必須加條件,無where則為全表更新,不滿足條件的為空白


update a set a.col1=100     將所有行全部的特定列col1更新為特定值
update a set a.col1=100 where a.col2<10 將滿足col2條件的行的col1列的值更新為特定的值
update a set a.col1=a.col1+a.col2 where a.col2<10 同一個表中的簡單計算更新
update a set a.col1=(select b.col1 from b where a.col2=b.col2)
where exists(select * from b where a.col2=b.col2) 串聯更新,將滿足a.col2=b.col2的行的a.col1更新為對應的
b.col1的值。若且唯若a=b時可以將where條件去掉。這個更新還可以這樣理解:
update a set a.col1=(select b.col1 from b where a.col2=b.col2)表示對於a中所有行滿足a.col2=b.col2
的進行更新,不滿足條件的也更新,只不過找不到對應的值,只能將空值賦之,如果此時a.col1不允許為空白那麼會報插入空值錯誤。
所以只有加上where條件,才能將a.col2<>b.col2的那些在a中的資料得以倖存不被更新為空白)。


inline view更新法就是更新一個臨時建立的視圖

update (select a.state as state_a,b.state as state_b from a,b where a.col1=b.col1 and a.col2=value) set state_a=state_b;   --col1為b表的主鍵

括弧裡通過關聯兩表建立一個視圖,set中設定好更新的欄位。直觀速度快,但b的主鍵一定要在where條件中,並且是以"="來關聯被更新表,否則報錯:ora-01779:無法修改與非索引值儲存表對應的列


merge into進行多表更新:merge table1 into table2 on condition when matched then update table1 set col1=value1,col2=value2 when not matched then insert (col_list) values (value_list);


快速遊標更新法:

begin

for cr in (查詢語句) loop  --迴圈

   --更新語句根據查詢出來的結果集合)

end loop;

end;

oracle支援快速遊標,不需要定義直接把遊標寫到for迴圈中,方便批次更新資料。再加上rowid物理欄位,可以快速定位到要更新的記錄上。


方案
建議
標準update
單表更新或較簡單的語句採用使用此方案更優
inline view 更新法 兩表關聯且被更新表通過關聯表主鍵關聯的,此方案更優
meger into 更新法 兩表關聯且被更新表不是通過關聯表主鍵關聯的,此方案更優
快速遊標更新法 多表關聯且邏輯比較複雜的,此方案更優


本文出自 “奔跑的羚羊” 部落格,請務必保留此出處http://heshw.blog.51cto.com/5891747/1293594

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.