当我尝试执行以下语句时:
INSERT INTO myTable (id, some_data, more_data)
SELECT ?, ?, ? FROM dual
WHERE NOT EXISTS (
SELECT 1 FROM myTable WHERE id = ?)
我得到 ORA-01461: can bind a LONG value only for insert into a LONG column。
但是,当我将查询更改为:
INSERT INTO myTable (id, some_data, more_data)
VALUE (?, ?, ?)
使用相同的值,语句成功。
请注意,我的表包含 VARCHAR2 和 BLOB。但是这两个语句的值是相同的。
知道为什么原版失败了吗?
Edit1:评论者(Romain)和一位同事建议我使用 MERGE INTO 而不是 INSERT...SELECT...WHERE NOT EXISTS...。很好,我做到了 - 但它给了我同样的问题(ORA-01461 ……长……长)。
Edit2: BLOB 列上的 to_lob(?) 不能正常工作,给我“ORA-00932:不一致的数据类型:预期的 LONG BINARY 得到 BINARY”。