oracle update 原理


Oracle的update語句優化研究 
一、 update語句的語法與原理 
1. 語法 
單表:UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值 如:update t_join_situation set join_state='1' where year='2011' 
更新年度為“2011”的數據的join_state字段為“1”。如果更新的字段加了索引,更新時會重建索引,更新效率會慢。  
多表關聯,並把一個表的字段值更新到另一個表中的字段去: 
update 表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2) where exists(select 1 from 表b where a.字段2=b.字段2)   
oracle的更新語句不通MSSQL那么簡單易寫,就算寫出來了,但執行時可能會報 
 
這是由於set哪里的子查詢查出了多行數據值,oracle規定一對一更新數據,所以提示出錯。要解決這樣必須保證查出來的值一一對應。 
2. 原理 
Update語句的原理是先根據where條件查到數據后,如果set中有子查詢,則執行子查詢把值查出來賦給更新的字段,執行更新。 
如:update 表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2) where exists(select 1 from 表b where a.字段2=b.字段2)。查表a的所有數據,循環每條數據,驗證該條數據是否符合exists(select 1 from 表b where a.字段2=b.字段2)條件,如果是則執行(select b.字段1 from 表b where a.字段2=b.字段2)查詢,查到對應的值更新a.字段1中。關聯表更新時一定要有exists(select 1 from 表b where a.字段2=b.字段2)這樣的條件,否則將表a的其他數據的字段1更新為null值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM