用随机字符串替换 blob

replace blob with random string

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

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

由于其中一行的长度为 190,000,我 运行 出现错误

String concatenation result is more than the maximum size.

还有其他方法吗?

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。