Oracle Merge оператор ORA-01036 ошибка c# ado.net

Это скорее предупреждение, чем вопрос, так как это избавит кого-то от многих головных болей, если они столкнутся с этой ситуацией.

Я столкнулся с загадочной ошибкой ORA-01036 в моем операторе слияния, когда я установил свойство bindbyname команды в true.
Если я задаю 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 ответ

  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)
    

    Это даст вам ошибку. Исправление заключается в изменении инструкции insert в последней строке на:

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