用随机字符串替换 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。
我正在使用 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。