新聞中心
先建立一個(gè)結(jié)構(gòu)一模一樣的表emp1,并為其插入部分?jǐn)?shù)據(jù)

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的遂溪網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
update掉emp1中的部分?jǐn)?shù)據(jù)
然后我們?cè)囍褂胑mp1中數(shù)據(jù)來(lái)更新emp中sal 和 comm這兩列數(shù)據(jù)。
我們可以這么寫
請(qǐng)你尤其注意這里的where子句,你可以嘗試不寫where子句來(lái)執(zhí)行以下這句話,你將會(huì)使得emp中的很多值變成空。
這是因?yàn)樵趏racle的update語(yǔ)句中如果不寫where子句,oracle將會(huì)默認(rèn)的把所有的值全部更新,即使你這里使用了子查詢并且某在值并不能在子查詢里找到,你就會(huì)想當(dāng)然的以為,oracle或許將會(huì)跳過(guò)這些值吧,你錯(cuò)了,oracle將會(huì)把該行的值更新為空。
我們還還可以這么寫:
這里的表是一個(gè)類視圖。當(dāng)然你執(zhí)行時(shí)可能會(huì)遇到如下錯(cuò)誤:
ERROR 位于第 2 行:
ORA-01779: 無(wú)法修改與非鍵值保存表對(duì)應(yīng)的列
這是因?yàn)樾陆ǖ谋韊mp1還沒(méi)有主鍵的緣故
下面增加一個(gè)主鍵
執(zhí)行之后
在執(zhí)行前面的語(yǔ)句就能成功。
這里我們總結(jié)一下:
在oracle中不存在update from結(jié)構(gòu),所以遇到需要從另外一個(gè)表來(lái)更新本表的值的問(wèn)題的時(shí)候,有兩種解決的辦法:
一種是使用子查詢,使用子查詢時(shí)一定要注意where條件(一般后面接exists子句),除非兩個(gè)表是一一對(duì)應(yīng)的,否則where條件必不可少,遺漏掉where條件時(shí)可能會(huì)導(dǎo)致插入大量空值。
另外一種是類視圖的更新方法,這也是oracle所獨(dú)有的。先把對(duì)應(yīng)的數(shù)據(jù)全部抽取出來(lái),然后更新表一樣更新數(shù)據(jù),這里需要注意的是,必須保證表的數(shù)據(jù)唯一型。
【編輯推薦】
- 善用Oracle表空間設(shè)計(jì)提升數(shù)據(jù)庫(kù)性能
- 使用Java編寫Oracle存儲(chǔ)過(guò)程
- 詳解Oracle數(shù)據(jù)庫(kù)中DUAL表的使用
當(dāng)前標(biāo)題:Oracle中只更新兩張表對(duì)應(yīng)數(shù)據(jù)的方法
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/dpihogh.html


咨詢
建站咨詢
