熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle中只更新兩張表對應數據的方法

2013-11-13 15:31:21  來源: Oracle 

  先建立一個結構一模一樣的表emp並為其插入部分數據

  

  create table emp
as
select * from emp where deptno = ;

  update掉emp中的部分數據

  

  update emp
set sal = sal +
comm = nvl(comm) +

  然後我們試著使用emp中數據來更新emp中sal 和 comm這兩列數據

  我們可以這麼寫

  

  Update emp
Set(salcomm) = (select salcomm From emp where empempno = empempno)
Where exists (select from emp where empempno = empempno)

  請你尤其注意這裡的where子句你可以嘗試不寫where子句來執行以下這句話你將會使得emp中的很多值變成空

  這是因為在oracle的update語句中如果不寫where子句oracle將會默認的把所有的值全部更新即使你這裡使用了子查詢並且某在值並不能在子查詢裡找到你就會想當然的以為oracle或許將會跳過這些值吧你錯了oracle將會把該行的值更新為空

  我們還還可以這麼寫

  

  update (select asal asalbsal bsalm acomm

  m bcomm from emp aemp b where aempno = bempno)
set asal = bsal
acomm = bcomm;

  這裡的表是一個類視圖當然你執行時可能會遇到如下錯誤:

  ERROR 位於第 行:

  ORA: 無法修改與非鍵值保存表對應的列

  這是因為新建的表emp還沒有主鍵的緣故

  下面增加一個主鍵

  

  alter table emp

  add constraint pk_emp primary key (empno);

  執行之後

  在執行前面的語句就能成功

  這裡我們總結一下

  在oracle中不存在update from結構所以遇到需要從另外一個表來更新本表的值的問題的時候有兩種解決的辦法:

  一種是使用子查詢使用子查詢時一定要注意where條件(一般後面接exists子句)除非兩個表是一一對應的否則where條件必不可少遺漏掉where條件時可能會導致插入大量空值

  另外一種是類視圖的更新方法這也是oracle所獨有的先把對應的數據全部抽取出來然後更新表一樣更新數據這裡需要注意的是必須保證表的數據唯一型


From:http://tw.wingwit.com/Article/program/Oracle/201311/16852.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.