当我尝试执行以下语句时:
INSERT INTO myTable (id, some_data, more_data)
SELECT ?, ?, ? FROM dual
WHERE NOT EXISTS (
SELECT 1 FROM myTable WHERE id = ?)我得到ORA-01461:只能将一个长值绑定到一个长列中。
但是,当我将查询更改为:
INSERT INTO myTable (id, some_data, more_data)
VALUE (?, ?, ?)使用相同的值,语句将成功。
注意,我的表包含VARCHAR2和BLOB。但这两条语句的值是相同的。
知道原版为什么失败了吗?
Edit1:评论(罗曼)和一个同事建议我用合并代替INSERT...SELECT...WHERE不存在.很好,我说了-但这也给了我同样的问题(ORA-01461.很久..。长)。
Edit2: to_lob(?)在BLOB列上也不起作用,给我"ORA-00932:不一致的数据类型:预期的长二进制二进制文件“。
发布于 2012-05-09 07:05:35
给我们一个有价值的例子。它适用于简单的值:
CREATE TABLE feed (Id NUMBER, DATA VARCHAR2(30) , data1 BLOB);
INSERT INTO feed VALUES (1, '1', '1');
INSERT INTO feed (id, DATA, data1)
SELECT 1, '1', '1' FROM dual WHERE NOT EXISTS ( SELECT 1 FROM feed WHERE id = 1) ;
INSERT INTO feed
(SELECT 2, '1', '1' FROM dual
WHERE NOT EXISTS ( SELECT 1 FROM feed WHERE id = 3) );
Result:
SELECT * FROM feed
1 1 1 <BLOB>
2 1 1 <BLOB>https://stackoverflow.com/questions/10499878
复制相似问题