Oracle沒有UPDATE FROM 的解決方法

2021-07-10 05:22:56 字數 1116 閱讀 2062

oracle沒有update from語法,可以通過兩種寫法實現同樣的功能:

1:子查詢update a set a.name=(select b.name from b where b.id=a.id),本查詢要根據具體情況看看是否變通成如下

(1)單列

update a

set a.name=(select b.name from b where b.id=a.id)

where a.id in (select id from b);

(2)多列

update order_rollup

set(qty,price)=(select sum(qty),sum(price) from order_lines where customer_id='kohl' )

where cust_id='kohl' and order_period=to_date('01-oct-2000')

2:利用檢視來做

update (select a.name aname,b.name bname from a,b where a.id=b.id)

set aname=bname;

例如:update tablea a

set a.fieldforupdate = (select b.fieldsource from tableb b where a.keyfield = b.keyfield)

where exists (select b.fieldsource from tableb b where a.keyfield = b.keyfield)

有三點需要注意:

1. 對於乙個給定的a.keyfield的值,select b.fieldsource from tableb b where a.keyfield = b.keyfield 的值只能是乙個唯一值,不能是多值。

2. 在絕大多數情況下,最後面的where exists子句是重要的,否則將得到錯誤的結果。因為如果不加這句則主表匹配不上的記錄會全部被更新為null!

3. 對於檢視更新的限制:

如果檢視基於多個表的連線,那麼使用者更新(update)檢視記錄的能力將受到限制。除非update只涉及乙個表且檢視列中包含了被更新的表的整個主鍵,否則不能更新檢視的基表。

oracle 儲存過程 沒有引數

create or replace procedure a meas miinsp plan update asvs msg varchar2 4000 log body varchar2 400 log body2 varchar2 400 updatecount number plancodes...

Oracle連線出現沒有監聽程式

今天需要用pl sql連線資料庫,發現好久沒有用oracle了,連線總是出現提示沒有監聽服務。網上收集了一下資料原因如下 首先確保tnsnames.ora檔案中host 屬性和listener.ora屬性都為自己目前的ip位址,之前配置的是localhost總是顯示找不到監聽程式。其次,tnsnam...

oracle 報錯 沒有足夠的值

錯誤語句 insert into student values 809,蔡樹敏 男 34,1973 下圖中執行結果的顯示是 select from student 的執行結果。是為了顯示student的屬性,方便接下來解釋問題。第一次寫資料庫作業,資料都是老師給的 想插入一行元組,測試語句的完整性,...