oracle中update的用法:1、用于修改表中的數(shù)據(jù),語法為“UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值”;2、用于將兩張表通過關(guān)聯(lián)建立一個視圖并進行更新。
本教程操作環(huán)境:Windows10系統(tǒng)、Oracle 11g版、Dell G3電腦。
oracle中update的用法是什么
Oracle除了提供標準的update語句之外還提供了其他的一些數(shù)據(jù)更新方式以應(yīng)對不同的應(yīng)用場景:
update_statement?::= UPDATE?{table_reference?|?[THE]?(subquery1)}?[alias] ?SET?{ ????????column_name?=?{sql_expression?|?(subquery2)} ??????|?(column_name?[,column_name]...)?=?(subquery3)}? ????????[,{column_name?=?{sql_expression?|?(subquery2)} ??????|?(column_name?[,column_name]...)?=?(subquery3) ?????}]... ?[WHERE?{search_condition?|?CURRENT_OF?cursor_name}]?[returning_clause]
標準update
Update?語句用于修改表中的數(shù)據(jù)。W3school中的語法?:
UPDATE?表名稱?SET?列名稱?=?新值?WHERE?列名稱?=?某值。
update?join?view
update?join?view?就是首先將兩張表通過關(guān)聯(lián)建立一個視圖然后將對視圖進行更新,進而達到更新源表目的?:
update?(select?bonus ??????????from?employee_bonus?b ?????????inner?join?employees?e?on?b.employee_id?=?e.employee_id ?????????where?e.bonus_eligible?=?'N')?t ???set?t.bonus?=?0
就像上面原理里面講的一樣,括號里面的是一個視圖,set中是需要更新的字段,這個方法直接且高效,但是限制比較死,其中的employees?表的主鍵必須出現(xiàn)在where條件中,否則會報錯,ORA-01779:無法修改與非鍵值保存表對應(yīng)的列。
merge?into
merge?into是Oracle特有的語句?:
MERGE?INTO?table_name?alias1 USING?(table?|?view?|?sub_query)?alias2 ON?(join?condition) WHEN?MATCHED?THEN ??UPDATE?table_name?SET?col1?=?col_val1,col2?=?col2_val WHEN?NOT?MATCHED?THEN ??INSERT?(column_list)?VALUES?(column_values);
它的原理是在alias2中Select出來的數(shù)據(jù),每一條都跟alias1進行?ON?(join?condition)的比較,如果匹配,就進行更新的操作(Update),如果不匹配,就進行插入操作(Insert).
@H_301_73@游標法
游標有顯示游標和快速游標。
快速游標
begin for?cur?in?(table|subquery)?loop ????update_statement end?loop;? end;
顯示游標
SET?SERVEROUTPUT?ON?? DECLARE?? ??CURSOR?emp_cursor?IS??? ??SELECT?empno,ename?FROM?emp;?? BEGIN?? FOR?Emp_record?IN?emp_cursor?LOOP????? ?????update_statement;?? END?LOOP;?? END;
使用游標好處很多,for循環(huán)給我們提供了更新批量數(shù)據(jù)的方法,再加上oracle的rowid物理字段(oracle默認給每個表都有rowid這個字段,并且是唯一索引),可以快速定位到要更新的記錄上,同時可以支持復(fù)雜的查詢語句。
推薦教程:《Oracle視頻教程》