插入...选择 - 获取ORA-01461:只能插入LONG值以插入LONG列

时间:2012-05-08 13:45:17

标签: sql oracle insert prepared-statement

当我尝试执行以下语句时:

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”。

1 个答案:

答案 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>