oracle的表更新問題,oracle的表更新問題

2023-01-15 21:30:48 字數 2040 閱讀 1794

1樓:為你莫哀3秒

先建立一個結構一模一樣的表emp1,併為其插入部分資料

create table emp1

asselect * from emp where deptno = 20;

update掉emp1中的部分資料

update emp1

set sal = sal 100,

comm = nvl(comm,0) 50

然後我們試著使用emp1中資料來更新emp中sal 和 comm這兩列資料。

我們可以這麼寫

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子句來執行以下這句話,你將會使得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;

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

error 位於第 2 行:

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

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

下面增加一個主鍵

alter table emp1

add constraint pk_emp1 primary key (empno);

執行之後

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

這裡我們總結一下:

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

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

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

2樓:匿名使用者

1、update a,b set a.name=b.name,a.

result=b.result,a.remark=b.

remark where a.id=b.id;

2、create or replace procedure test() as

begin

update a,b set a.name=b.name,a.

result=b.result,a.remark=b.

remark where a.id=b.id;

end test;

/3、shell script

id.txt包含id列表,每行一個id

#!/bin/sh

for id in `cat id.txt`;do

echo -e "update a set a.name=(select z.name from b z where z.

id=$),a.result=(select x.result from b x where x.

id='$'),a.remark=(select y.remark from b y where y.

id='$') where a.id='$';"

done | sqlplus -s 'user/pw'

永恆之塔更新問題,永恆之塔更新問題

一般方法 請安裝十全補丁。特殊方法 到永恆之塔的安裝目錄aion bin32裡面的aion.bin檔案複製 然後改名字aion.com 然後在桌面新建一個文字文件 f cd cd plaync 永恆之塔 aion call bin32 aion.com 文件改成aion.bat 上面的目錄改成自己安...

CF更新問題

似乎不能,但是可以把整個資料夾覆蓋就行了。可以試試這個方法 每次更新時都要顯示檔名,把這些記下來,然後覆蓋到原來的裡面就行。你只要不是把cf的原始檔放在c盤 就算還原了也可以用 cf不是屬於系統安裝檔案,也就是說就算你重新做系統,也不會影響他的正常執行。你在 開始 的選單欄點 搜尋 輸入 cross...

關於Windows更新問題

執行裡面的installer.bat 重起電腦就ok了。方法二 在登錄檔中也搜不到相關wgatray.exe的項,但在仔細地搜尋了登錄檔後,還是找到了這個的可惡東西。hkey local machine software microsoft windows nt currentversion win...