Oracle 兩表更新 報錯ORA-01779: 無法修改與非鍵值保存表對應的列


 

--用B表字段更新A表字段
UPDATE (
select a.is_work iswork from dim_time a ,(select date_num,is_rest
 from WORKTIME_SPECIALDAY@oa ) b where a.fdate = b.date_num and b.IS_REST !=0 --order by a.fdate
)t
set t.iswork =1;

報錯:

 

 

原因:B表去更新A表字段,在A表和B表關聯的時候,B表date_num不是主鍵或date_num字段沒有設置唯一鍵,導致B表date_num里有重復數據

解決辦法:

  第一種:修改業務數據,使date_num數據唯一

  第二種:寫一個視圖(DIM_WORKTIME_SPECIALDAY),去重之后再更新

select distinct to_date(date_num,'yyyy-mm-dd hh24:mi:ss') as date_num, is_rest
 from WORKTIME_SPECIALDAY where IS_REST =0 and org_account_id ='670869647114347'
UPDATE (
select a.is_work iswork from dim_time a ,(select date_num,is_rest 
 from DIM_WORKTIME_SPECIALDAY ) b where a.fdate = b.date_num and b.IS_REST !=0 order by a.fdate
)t
set t.iswork =1;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM