注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

merge语句报错:ORA-38104: 无法更新 ON 子句中引用的列  

2015-05-25 14:52:05|  分类: ORA等错误处理 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
原sql:
merge into weekly_report t1
using (select v_开始日期 开始日期, v_结束日期 结束日期 from dual) t2
on (t1.开始日期 = t2.开始日期)
when matched then
    update
       set t1.开始日期=t2.开始日期,
           t1.结束日期 = t2.结束日期
when not matched then
    insert (开始日期, 结束日期) values (t2.开始日期, t2.结束日期);


此语句执行时会报错:ORA-38104: 无法更新 ON 子句中引用的列: "T1"."开始日期"
经查原因是:在on条件中的列是不可以更新的。
上面的语句也可以看出,因为有on (t1.开始日期 = t2.开始日期),所以也没必要再执行set t1.开始日期=t2.开始日期。

所以,对于此错误,完全可以去掉set t1.开始日期=t2.开始日期,如下:
merge into weekly_report t1
using (select v_开始日期 开始日期, v_结束日期 结束日期 from dual) t2
on (t1.开始日期 = t2.开始日期)
when matched then
    update
       set --t1.开始日期=t2.开始日期,
           t1.结束日期 = t2.结束日期
when not matched then
    insert (开始日期, 结束日期) values (t2.开始日期, t2.结束日期);  
  评论这张
 
阅读(3920)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018