1

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

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

4

1 回答 1

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>
于 2012-05-09T07:05:35.550 回答