【问题标题】:Update NCLOB column with a XML of more than 4000 characters in Oracle SQL在 Oracle SQL 中使用超过 4000 个字符的 XML 更新 NCLOB 列
【发布时间】:2014-07-13 05:38:20
【问题描述】:

我有一个表,其列名 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 存储到变量中并将列更新为该变量,但没有用

【问题讨论】:

  • 这个字符串有多长超过 4000 个字符?如果它总是小于 32k,那么您可以将其分配给 PL/SQL 中的 CLOB 变量,然后将其用于插入。否则,您必须在高达 32k 的缝隙中构建 CLOB,这需要更多的工作。您对变量进行了哪些尝试,为什么它不起作用?

标签: sql oracle plsql oracle11g oracle-sqldeveloper


【解决方案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 的消息长度。 之后我就停下来了,没有错误。

【讨论】:

  • 不。在尝试将最终值分配给列之前,它会尝试将多个 4k 字符串组合成一个,因此它仍然会出错。出现不同的错误,但不幸的是,它仍然无法正常工作。
  • 你说得对,第一种方法行不通,但我不放弃...看来如果您使用更新将较小的字符串添加到NCLOB,它可以工作!跨度>
  • 有趣;我也不认为那会奏效。 But it does.
猜你喜欢
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
相关资源
最近更新 更多