2016-08-12 90 views
0

我有一個列類型爲LONG的表。我知道我可以通過將列類型更改爲CLOB來解決我的問題,但在這種情況下我沒有該選項。我需要將超過32k個字符的值插入此列。將超過32k字符的值插入到oracle的長列中

假設我有一張名爲test的表,名爲c1的列爲LONG

以下語句會產生錯誤。

insert into test(c1)values('string longer than 32k chars'); 

error:ORA-01704: string literal too long.

預先感謝任何幫助。

使用託尼的例子從下面我想要做的東西像下面這樣:

declare 
    x varchar2(40000) := rpad('x',40000,'x'); 
begin 
    insert into test (c1) values (x); 
end; 

我知道你不能做VARCHAR(2)大,但我想鍛鍊的想法。

+0

LONGs已棄用20年了嗎?如果你仍然在數據庫中困住他們,有人真的放棄了這個球。 – sstan

+0

我不認爲這是可能的與SQL。你會考慮編寫一個最有可能用C語言編寫的外部客戶端,它可以使用舊的OCI API將這麼多的數據插入到LONG中。 –

+0

也許用這個作爲更新LONG到CLOB的一個很好的理由? – tbone

回答

1

您可以插入從PL/SQL 32K字:

declare 
    x varchar2(32767) := rpad('x',32767,'x'); 
begin 
    insert into test (c1) values (x); 
end; 
+0

在上面的例子中,4000字符串在哪裏去? – Maxqueue

+0

在上面的例子中,'rpad('x',32767,'x')'是一個長度爲32767的字符串,其中所有字符都是'x'。它被創建,然後分配給VARIABLE x(同時創建並賦值)。然後它被插入到'test',列'c1' – mathguy

+0

,所以當我用'[string long than 4000]替換「rpad('x',32767,'x')」'時,我得到錯誤。你的例子工作。我不明白爲什麼更換rpad('x',32767,'x')不起作用。 – Maxqueue

0

廢話。你什麼意思?

SQL> create table test(c1 long); 

Table created. 

SQL> insert into test(c1)values('string longer than 4000 chars'); 

1 row created. 

SQL> select * from test; 

C1 
------------------------------------------------- 
string longer than 4000 chars 

1 row selected. 
+1

哈哈有趣。我想我可以更新語句實際顯示4000個字符的字符串 – Maxqueue

+0

所以,實際上,問題是插入一個長字符串,而不是像您的示例所示插入「任何」字符串。你目前的長字符串在哪裏?你需要在哪裏插入它? – mathguy

+0

在我的問題中,我特別聲明「我需要在此列中插入超過4000個字符的值」。我只需要使用sqlplus插入它 – Maxqueue

相關問題