ODP.NET を使用して MERGE 文を実行したところ、AccessViolationException が発生しました。
原因は不明。また、どんな環境でも再現するかどうかは不明ですが、その環境では再現性があったので、念のためメモ。
以下がそのコード。
'参照設定 Oracle.DataAccess, Version=4.112.3.0, Culture=neutral Imports Oracle.DataAccess.Client Module Module1 Sub Main() Dim conn = New OracleConnection("User Id=scott; Password=tiger; Data Source=????") conn.Open() Dim tr = conn.BeginTransaction Dim cmd = New OracleCommand( "merge into EMP " & " using DUAL " & " on (EMP.EMPNO = :empno) " & " when matched then " & " update set ENAME = :ename " & " JOB = :job " & " MGR = :mgr " & " HIREDATE = :hiredate " & " SAL = :sal " & " COMM = :comm " & " DEPTNO = :deptno " & " when not matched then " & " insert ( EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) " & " values (:empno, :ename, :job, :mgr, :hiredate, :sal, :comm, :deptno) ", conn) cmd.Parameters.Add("empno", 9999) cmd.Parameters.Add("ename", "BBBB") cmd.Parameters.Add("job", "CLERK") cmd.Parameters.Add("mgr", "") cmd.Parameters.Add("hiredate", Now) cmd.Parameters.Add("sal", 100) cmd.Parameters.Add("comm", "CCCC") cmd.Parameters.Add("deptno", 10) Dim q = cmd.ExecuteNonQuery() tr.Commit() conn.Clone() End Sub End Module
結果