用随机字符串替换blob

时间:2016-10-25 22:21:04

标签: database oracle blob

我正在使用Oracle 11g。我的一个表有一个blob类型的列。我试图用与列中现有值相同长度的随机字符串替换此列中的值。这就是我所做的:

`update order set info = XMLSERIALIZE(CONTENT XMLTYPE('<edit>'||DBMS_RANDOM.STRING('X', length(info))||'</edit>') as blob) where info is not null;` 

由于其中一行的长度为190,000,我遇到了错误

  

字符串连接结果超过最大大小。

还有其他办法吗?

1 个答案:

答案 0 :(得分:0)

maximum length of a VARCHAR2 in SQL is 4000 bytes in Oracle 11g。您尝试运行此语句的任何行超过3987字节(<edit></edit>标记为4000减去13)将导致错误,因为您将超过4000字节限制。

你可以:

  • 将长度限制为3987,如: DBMS_RANDOM.STRING('X', GREATEST(length(info), 3987))
  • 或者使用PL / SQL和dbms_lob包来构建所需的blob。 PL / SQL的最大VARCHAR2长度为32767字节,但也允许循环结构,允许您在32767块中循环length(info)并使用dbms_lob.append将数据附加到lob变量。

编辑:使用GREATEST而不是MAX。