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