当我尝试执行以下语句时:
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。但这两个陈述的价值是相同的。
知道为什么原版失败了?
EDIT1: Commenter(Romain)和同事建议我使用MERGE INTO而不是INSERT ... SELECT ...不存在......好点,我做了 - 但它给了我同样的问题(ORA-01461 .. LONG ... LONG)。
EDIT2: BLOB列上的to_lob(?)也不起作用,给我“ORA-00932:不一致的数据类型:预期LONG BINARY得到了BINARY”。
答案 0 :(得分:0)
给我们一个值示例。它适用于简单的值:
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>