次のステートメントを実行しようとすると、次のようになります。
INSERT INTO myTable (id, some_data, more_data)
SELECT ?, ?, ? FROM dual
WHERE NOT EXISTS (
SELECT 1 FROM myTable WHERE id = ?)
ORA-01461を取得します。LONG列に挿入する場合にのみLONG値をバインドできます。
ただし、クエリを次のように変更すると、次のようになります。
INSERT INTO myTable (id, some_data, more_data)
VALUE (?, ?, ?)
同じ値を使用して、ステートメントは成功します。
私のテーブルにはVARCHAR2とBLOBが含まれていることに注意してください。ただし、両方のステートメントの値は同じです。
オリジナルが失敗した理由は何ですか?
編集1:コメンター(Romain)と同僚が、INSERT ... SELECT ... WHERE NOTEXISTSの代わりにMERGEINTOを使用することを提案しました...いい点ですが、同じ問題が発生します(ORA-01461 ... LONG ... LONG)。
Edit2:BLOB列のto_lob(?)も機能せず、「ORA-00932:一貫性のないデータ型:期待されるLONGBINARYがBINARYを取得しました」と表示されます。