2012-05-08 32 views
1

當我嘗試執行以下語句:插入...選擇 - 讓ORA-01461:只能用於插入結合long值轉換爲一個LONG列

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。但是這兩個陳述的價值都是一樣的。

任何想法爲什麼原始失敗?

編輯1: 評論員(羅曼)和同事建議我使用MERGE INTO而不是INSERT ... SELECT ... WHERE NOT EXISTS ....好的一點,我做了 - 但它給了我相同的問題(ORA-01461 ... LONG ... LONG)。

編輯2: 對BLOB列的to_lob(?)不起作用,給我「ORA-00932:不一致的數據類型:預期的LONG BINARY得到BINARY」。

+0

看起來你想要做的事情可以用MERGE語句來實現...... – Romain

+0

是的,一位同事剛剛提到過。我仍然想知道爲什麼這不起作用。當我使用to_lob()時,我得到「ORA-00932:不一致的數據類型:預計的LONG BINARY得到了BINARY」。 –

回答

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> 
相關問題