【问题标题】:Oracle Merge statement ORA-01036 error c# ado.netOracle Merge 语句 ORA-01036 错误 c# ado.net
【发布时间】:2016-05-05 12:56:49
【问题描述】:

这与其说是一个问题,不如说是一个警告,因为如果遇到这种情况,它会为人们省去很多麻烦。

当我将命令的 BindByName 属性设置为 true 时,我在合并语句中遇到了神秘的 ORA-01036 错误。 如果我将 BindByName 设置为 false,情况会变得更糟,实际上会给出不正确的结果,而不会给出错误消息。

经过一番研究,事实证明,你不能在查询中重复关键参数,而是你需要使用 using 语句中的关键变量作为插入中的关键变量。这是一个简单的插图。

merge into rsvp r using (select :id as id from dual) d on (r.id=d.id)
 when matched then update set rsvp_date=sysdate
 when not matched then insert (id,rsvp_date) values (:id, sysdate)

这会给你错误。解决方法是将最后一行的插入语句更改为:

   when not matched then insert (id,rsvp_date) values (d.id, sysdate)

【问题讨论】:

    标签: oracle ado.net ora-01036


    【解决方案1】:

    经过一番研究,事实证明,你不能在查询中重复关键参数,而是你需要使用 using 语句中的关键变量作为插入中的关键变量。这是一个简单的插图。

    merge into rsvp r using (select :id as id from dual) d on (r.id=d.id)
     when matched then update set rsvp_date=sysdate
     when not matched then insert (id,rsvp_date) values (:id, sysdate)
    

    这会给你错误。解决方法是将最后一行的插入语句更改为:

       when not matched then insert (id,rsvp_date) values (d.id, sysdate)
    

    【讨论】:

    • 我已经用这个信息编辑了你的问题,你可以删除这个评论。
    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2016-06-05
    • 2013-12-13
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多