Оператор слияния Oracle 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)

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

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

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)
Другие вопросы по тегам