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的屬性,方便接下來解釋問題。第一次寫資料庫作業,資料都是老師給的 想插入一行元組,測試語句的完整性,...