我在CLOB中有一个很长的文本,我正在尝试使用函数htp.prn
下面是我的代码:
n := dbms_lob.getlength(html); -- n is 31745 characters
if n<32000 then
htp.prn(HTML); -- << Error raised here
else
do something else
end if;
当使用函数htp. prn时,我得到错误:* * ORA-06502:PL/SQL:数字或值错误**
我知道允许的文本大小是32672个字符。并且文本包含一些中文字符。因此,我假设问题来自dbms_lob. getlength
有人知道怎么解吗?
谢谢干杯
2条答案
按热度按时间ha5z0ras1#
如果您有Unicode字符(您提到了中文),并且数据库使用多字节字符集,那么字节数大于字符数。32767是 bytes 的硬限制。而用于CLOB和NCLOB的dbms_lob.getlength计数 characters。因此您可能超过了32K的字节数限制。
您无法轻松地获得CLOB的字节长度。有各种各样令人不快的变通方法,但对您来说最简单的事情可能是捕获异常,而不是预测异常:
q8l4jmvw2#
多字节字符,嗯?
也许您可以通过将 string 拆分为更小的块来处理它。
我的例子使用了 * 而不是那个长字符串 *,然后将其拆分为20个字符,我只是显示它们(第10行);你会
htp.prn
它(第11行)。