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

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

 1 create or replace Function BlobToVarchar (Blob_In In Blob) Return clob
 2 Is
 3     V_Varchar Varchar2(32767);
 4      V_Varchar1 Varchar2(32767);
 5     V_Start Pls_Integer := 1;
 6     V_Buffer Pls_Integer := 4000;
 7 Begin
 8
 9     If Dbms_Lob.Getlength(Blob_In) Is Null Then
10         Return ‘‘;
11     End If;
12     V_Varchar1 := ‘‘;
13  --return to_char(Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer));
14     For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop
15         --当转换出来的字符串乱码时,可尝试用注释掉的函数
16         --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‘));
17         V_Varchar :=  Utl_Raw.Cast_To_Varchar2(Dbms_Lob.Substr(Blob_In, V_Buffer, V_Start));
18         V_Varchar1 := V_Varchar1 || V_Varchar;
19
20         V_Start := V_Start + V_Buffer;
21     End Loop;
22
23     Return V_Varchar1;
24
25 End Blob_To_Varchar;

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 = ‘‘ ;
时间: 2024-10-06 05:17:46

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

金额转换,阿拉伯数字的金额转换成中国传统输出。

1 package sfbc; 2 3 import java.text.DecimalFormat; 4 import java.util.HashMap; 5 import java.util.Map; 6 /** 7 * 金额转换,阿拉伯数字的金额转换成中国传统输出. 8 * @author trfizeng 9 * 10 */ 11 public class FormateMoneyCN { 12 // 阿拉伯数字对应的大写汉字 13 public static final Map<St

隐式转换和显式转换及强制转换的区别【转】

隐式转换和显式转换及强制转换的区别 string strType = "123"; object objType= (object)strType;//可以不要,隐式转换, 要的为显式转换 string strType2 = (string)objType; //必须要,显式转换 int intType = (int)strType; //错误,不能通过编译 int intType = (int)objType; //错误,能通过编译 int intType = Convert.ToI

C的强制转换和C++的强制转换(转)

C的强制转换: (type)<expression> 其中,type为类型描述符,如int,float等.<expression>为表达式.经强制类型转换运算符运算后,返回一个具有type类型的数值,这种强制类型转换操作并不改变操作数本身,运算后操作数本身未改变,例如: int nVar=0xab65; char cChar=char (nVar); 上述强制类型转换的结果是将整型值0xab65的高端两个字节删掉,将低端两个字节的内容作为char型数值赋值给变量cChar,而经过类

mysql的char,varchar,text,blob

mysql的char,varchar,text,blob是几个有联系但是有有很大区别的字段类型,这算是mysql的基础吧,可是基础没有学好,恶补一下. 先简单的总结一下: char:定长,最大255个字符 varchar:变长,最大65535个字符(既是单列的限制,又是整行的限制) text:变长,有字符集的大对象,并根据字符集进行排序和校验,大小写不敏感 blob:变长,无字符集的二进制大对象,大小写敏感 以下只是我个人的理解,才疏学浅,望各路高人指点. 我使用的引擎是myisam,所以以下的

数据格式转换(一)PDF转换技术

PDF(Portable Document Format)文件格式是Adobe公司开发的电子文件格式.这种文件格式与操作系统平台无关,这一特点使它成为在Internet上进行电子文档发行和数字化信息传播的理想文档格式.越来越多的电子图书.产品说明.公司文告.网络资料.电子邮件开始使用PDF格式文件.PDF格式文件目前已成为数字化信息事实上的一个工业标准. PDF具有许多其他电子文档格式无法相比的优点.PDF文件格式可以将文字.字型.格式.颜色及独立于设备和分辨率的图形图像等封装在一个文件中.该格

PHP编码转换减号(连接符)无法转换问题

PHP编码转换减号(连接符)无法转换问题技术 maybe yes 发表于2015-01-23 16:03 原文链接 : http://blog.lmlphp.com/archives/67  来自 : LMLPHP后院 使 用 PHP 的 iconv 或 mb_convert_encoding 函数进行编码转换,比如将 gb2312 转换为 utf-8 编码,在出现某些特殊字符(减号,连接符)时,不能正常工作,可能会变成问号"?"或者"C".尝试了多种方法,依然不能

将list&lt;对象&gt;转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据

领导让在存储过程中批量添加数据,找出效率最高的,我看到后台代码后,发现可以将list<对象>转换成DataTable,把DataTable转换成参数传入存储过程实现批量插入数据,知道还有其他的方法,不过这个方法已经实现,就写一下了: 1.创建表. CREATE TABLE [dbo].[person]( [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NULL, [Pwd] [nvarchar](50) NULL, [Age]

C#字母转换成数字/数字转换成字母 - ASCII码转换

字母转换成数字 byte[] array = new byte[1];   //定义一组数组arrayarray = System.Text.Encoding.ASCII.GetBytes(string); //string转换的字母int asciicode = (short)(array[0]); ASCII码 = Convert.ToString(asciicode); //将转换一的ASCII码转换成string型 数字转换成字母byte[] array = new byte[1];ar

List转DataTable(反射) ; 将泛型集合类转换成DataTable ; 将集合类转换成DataTable

#region 将集合类转换成DataTable /// <summary> /// 将集合类转换成DataTable /// </summary> /// <param name="list">集合</param> /// <returns></returns> public static DataTable ToDataTable(IList list) { DataTable result = new Dat