拥有一个 oracle 数据库,其中一个字段设置为 LOB(大对象)数据类型。当我运行 select 语句时,会引发此错误:
ERROR:
ORA-22835: Buffer too small for CLOB to CHAR or BLOB to RAW conversion (actual: 10228,
maximum: 4000)
每个 tuble 内的字符串(即日志)的大小比缓冲区的最大容量多 10228。我需要获取整个字符串。
我能够想出这个临时解决方案:
Select dbms_lob.substr( BLOB_FieldName, 4000, 1 )
from Database name Where [Condition];
通过这个查询,我能够获得字符串的前 4000 个字节,这很棒,但我们需要整个字符串。
然后在阅读了关于 utl_raw.cast_to_varchar2 我尝试了以下
Select utl_raw.cast_to_varchar2( dbms_lob.substr( BLOB_fieldName, 19000, 1 ) )
from[dbname];
我使用 utl_raw.cast_to_varchar2 是因为我在网上某处读到 [Varchar2] 数据类型最多可容纳 32k 字节,并考虑将 [LOB] 数据类型转换为 Varchar2 ,但它没有用。
仅供参考,我们被限制使用 PL/SQL。环境是linux,rhel。
我需要一些有关如何执行此操作的指导。