ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小

摘要:
在使用Oralce时,直接取出CLOB到CHAR转换或BLOB到RAW转换时,会出现ORA-22835的异常,以下是个人的解决方案createorreplaceFunctionBlobToVarchar(Blob_InInBlob)ReturnclobIsV_VarcharVarchar2(32767);V_Varchar1Varchar2(32767);V_StartPls_Integer:=1

在使用Oralce时,直接取出 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换时,会出现ORA-22835的异常,以下是个人的解决方案

create or replace Function BlobToVarchar (Blob_In In Blob) Return clob
Is
V_Varchar Varchar2(32767);
V_Varchar1 Varchar2(32767);
V_Start Pls_Integer := 1;
V_Buffer Pls_Integer := 4000;
Begin

If Dbms_Lob.Getlength(Blob_In) Is Null Then
Return '';
End If;
V_Varchar1 := '';
--return to_char(Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer));
For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop
--当转换出来的字符串乱码时,可尝试用注释掉的函数
--V_Varchar := Utl_Raw.Cast_To_Varchar2(Utl_Raw.Convert(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start),'SIMPLIFIED CHINESE_CHINA.ZHS16GBK', 'AMERICAN_THE NETHERLANDS.UTF8'));
V_Varchar := Utl_Raw.Cast_To_Varchar2(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start));
V_Varchar1 := V_Varchar1 || V_Varchar;

V_Start := V_Start + V_Buffer;
End Loop;

Return V_Varchar1;

End ;

1.首先执行上面的函数,返回的是个clob

2将clob转成varchar2
说白了 就是 to_char(Blob_To_Varchar(字段))
创建二个函数 然后就可以用了,如果说实现 数据库里面大字段的批量替换还是比较方便
update DR_RPT_REPORT_DATASOURCE
set data_sql =
c2b(to_clob((select replace(Blob_To_Varchar(data_sql),'XXX','XXX') from DR_RPT_REPORT_DATASOURCE where data_id
='XXXX' ))) where data_id = '' ;

免责声明:文章转载自《ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇ubuntu守护进程rsyslog.conf_栈_百度空间单片机中的ROM,RAM和FLASH的作用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言的面向对象设计 —— 对 X264/FFMPEG 架构探讨

类似题目的文章已经不新鲜了,这里,我仅仅总结自己的一些代码经验,结合两款在视频开发领域比较常用的开源软件探讨C语言的应用问题。 1.为什么要用C语言 曾几何时,我也不熟悉C,最早接触C的是在大学四年级,当时已经学过pascal,过二级也是pascal。接着走上了Delphi的路,多方便的软件,写写画画,程序就出来了,本科的毕业设计就是这样出来的MIS,在当...

gcc 编译器参数

一、GCC编译过程 参考:http://hi.baidu.com/zengzhaonong/item/c00e079f500adccab625314f-------------------------------------    Pre-Processing   cpp        预处理    Compiling        ccl       ...

c++ 关于char *的类库函数

转自:c++ 关于char *的类库函数 一,拷贝:   char stpcpy(char *dest,const char *src) 将字符串src复制到dest   char strncpy(char *dest,const char *src,size_t maxlen) 复制src中的前maxlen个字符到dest中   char strnse...

一个比较牛的加密算法

一个加密算法 据说此加密算法每次加密的结果都不同,但解密的结果相同 using System; namespace test001 {  /**    对sSource,进行加密、解密操作。    @param sSource String :操作的字符串    @param iFlag int :操作类型 1-加密  2-解密    @return St...

大端模式和小端模式

参考资料 维基百科:http://zh.wikipedia.org/wiki/%E5%AD%97%E8%8A%82%E5%BA%8F 百度百科:http://baike.baidu.com/link?url=J5-a6IjSYnxbQyjjkid51Zr6YivgbYZM0z2sWNBsCMbc1E3wv2ACH6HlxTjY7RGDz3qeFoTRl21...

前端导出Excel兼容写法

今天整理出在Web前端导出Excel的写法,写了一个工具类,对各个浏览器进行了兼容。 首先,导出的数据来源可能有两种: 1. 页面的HTML内容(一般是table) 2. 纯数据 PS:不同的数据源,导出的写法也是不相同的。 技术方案 IE 无论数据来源是哪里,都是用ActiveXObject对象及相关的命令,IE10、11有点不同。  非IE 纯数据的...