在Oracle SQL中使用超过4000个字符的XML更新NCLOB列

时间:2014-05-23 18:42:56

标签: sql oracle plsql oracle11g oracle-sqldeveloper

我有一个列名为message的表,其类型为NCLOB,ID的类型为varchar2

我想更新特定ID的消息。我使用以下查询

update table_name set message='<<long XML Message>>' where ID=value

我收到以下错误:

Error at Command Line:6 Column:38
Error report:
SQL Error: ORA-01704: string literal too long
01704. 00000 -  "string literal too long"
*Cause:    The string literal is longer than 4000 characters.
*Action:   Use a string literal of at most 4000 characters.
       Longer values may only be entered using bind variables.

我尝试将xml存储到变量中并将列更新为此变量,但没有用

1 个答案:

答案 0 :(得分:1)

Oracle对文字字符串的长度有限制,你达到了这个限制。你可以把它分成4000个字符的块。这可能会为你做到这一点。我现在无法测试它。

update table_name set message= '<4K>' || '<4K>' || '<4K>' where ID=value

看起来上述情况不起作用。

让我们试试这个,1K块:

update table_name set message= '<1st 1K>' where ID=value;
update table_name set message= message || '<2nd 1K>' where ID=value;
update table_name set message= message || '<3rd 1K>' where ID=value;
update table_name set message= message || '<4th 1K>' where ID=value;

我能够添加80K的消息长度。 我刚刚停止了,没有错误。