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
結果
