日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Oracle中只更新兩張表對應數(shù)據(jù)的方法

先建立一個結(jié)構(gòu)一模一樣的表emp1,并為其插入部分數(shù)據(jù)

成都創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務,滿足客戶于互聯(lián)網(wǎng)時代的遂溪網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

update掉emp1中的部分數(shù)據(jù)

update emp1
set sal = sal + 100,
comm = nvl(comm,0) + 50

然后我們試著使用emp1中數(shù)據(jù)來更新emp中sal 和 comm這兩列數(shù)據(jù)。

我們可以這么寫

Update emp
Set(sal,comm) = (select sal,comm. From emp1 where emp.empno = emp1.empno)
Where exists (select 1 from emp1 where emp1.empno = emp.empno)

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

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

我們還還可以這么寫:

update (select a.sal asal,b.sal bsal,a.comm acomm,
b.comm bcomm from emp a,emp1 b where a.empno = b.empno)
set asal = bsal,
acomm = bcomm;

這里的表是一個類視圖。當然你執(zhí)行時可能會遇到如下錯誤:

ERROR 位于第 2 行:

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

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

下面增加一個主鍵

alter table emp1

add constraint pk_emp1 primary key (empno);

執(zhí)行之后

在執(zhí)行前面的語句就能成功。

這里我們總結(jié)一下:

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

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

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

【編輯推薦】

  1. 善用Oracle表空間設(shè)計提升數(shù)據(jù)庫性能
  2. 使用Java編寫Oracle存儲過程
  3. 詳解Oracle數(shù)據(jù)庫中DUAL表的使用

網(wǎng)站標題:Oracle中只更新兩張表對應數(shù)據(jù)的方法
路徑分享:http://m.5511xx.com/article/dpihogh.html