Oracle Merge语句ORA-01036错误c#ado.net

时间:2016-05-05 12:56:50

标签: oracle ado.net ora-01036

这更像是一个警示而不是一个问题,因为如果他们遇到这种情况,会给某些人带来很多麻烦。

当我将命令的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)

这会给你错误。修复方法是将最后一行的insert语句更改为:

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

1 个答案:

答案 0 :(得分:0)

经过一番研究后发现,你不能重复查询中的关键参数,而是你需要在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)

这会给你错误。修复方法是将最后一行的insert语句更改为:

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