clob与blob转为char

本文详细介绍了如何在数据库中将CLOB和BLOB字段转换为CHAR类型。首先解释了Varchar2、Blob和Clob字段的含义,接着通过实例演示了CLOB转换为CHAR的方法,包括使用DBMS_LOB.substr和TO_CHAR函数,并讨论了可能出现的问题。然后讲解了BLOB转换为CHAR的过程,涉及如何插入二进制数据以及使用UTL_RAW.cast_to_varchar2进行转换。最后提到了在PL/SQL中导出数据至Excel时可能遇到的乱码问题。

1. varchar2/blob/clob 字段含义

    数据库中提供了三种字段类型Varchar2、Blob和Clob用于存储字符串或二进制数据,其中Varchar2、Clob用于存储字符串数据,而Blob用于存储二进制数据。

              

Varchar2采用单字节存储,有两个最大长度:varchar2在表中字段长度最大为4000,在变量中长度最大为32767。

Blob 采用单字节存储,适合保存二进制数据,如图片文件。

Clob 采用多字节存储,适合保存大型文本数据。

 

 

2. clob转换为char

2.1 环境准备

create table tb_clob(id int,clobcolumn clob);

insert into tb_clob values (1,'clob字段类型

                          换行之后

                          需要转换为char字段');

commit;    

 

SELECT * FROM tb_clob;   

                1              <CLOB>

 

2.2 plsql之间导出excel

----在plsql中查询出数据后,选中数据,然后右键选择copy to excl 就能看到数据咯。

 

ID

CLOBCOLUMN

1

clob字段类型                                             换行之后                                             需要转换为char字段

 

----使用plsql虽然比较方便,但是可能会报错,超出excel单元格可容纳最大字符32767

 

2.3 dbms_lob.substr

----使用dbms_lob.substr转换,clob转为char字符最大为4000

select id,clobcolumn,dbms_lob.substr(clobcolumn,4000) from tb_clob;

 

                1              <CLOB>           "clob字段类型

                             换行之后

                             需要转换为char字段"

---- DBMS_LOB.SUBSTR(col1,10,4)表示从第4个字节开始取出10个字节

 

2.4 to_char

select id,clobcolumn,to_char(clobcolumn) from tb_clob;

                1              <CLOB>           "clob字段类型

                             换行之后

                             需要转换为char字段"

 

----如果字段长度超过4000时报错,可以用substr对clob字段进行截取

select id,clobcolumn,to_char(substr(clobcolumn,0)) from tb_clob;  

----substr(column,4,10) 表示从column中第4个字符开始截取到第10个字符

 

 

3. blob转换为char

3.1 环境准备

create table tb_blob(id int,blobcolumn blob);

 

----blob无法直接插入字符,或者利用utl_raw.cast_to_raw将要插入的字符转换为二进制在插入

----使用utl_raw.cast_to_raw插入数据

 

insert into tb_blob values (100,utl_raw.cast_to_raw('blob字段类型

                                             换行之后

                                             需要转换为char字段'));

commit;

 

SELECT * FROM tb_blob;

 100       <BLOB>

 

----利用utl_raw.cast_to_raw()转为二进制在插入

select utl_raw.cast_to_raw ('现在转为2进制会是什么呢?') from dual;

                CFD6D4DAD7AACEAA32BDF8D6C6BBE1CAC7CAB2C3B4C4D8A3BF

 

insert into tb_blob values(200, 'CFD6D4DAD7AACEAA32BDF8D6C6BBE1CAC7CAB2C3B4C4D8A3BF');

commit;

 

SELECT * FROM tb_blob;

                100         <BLOB>

                200         <BLOB>

 

 

3.2 plsql导出excel---乱码

----想像上面clob转char样,使用plsql查询数据后直接导出excel

ID

BLOBCOLUMN

100

汢扯???????????????????????????????????????????????????????????档牡??

 

----之所以是乱码,是因为存放的数据是二进制的

 

3.3 utl_raw.cast_to_varchar2

select t.*,utl_raw.cast_to_varchar2(blobcolumn) from tb_blob t;

 

  100    <BLOB> "blob字段类型

                    换行之后

                    需要转换为char字段"

  200    <BLOB> 现在转为2进制会是什么呢?

 

 

 

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30130773/viewspace-2122660/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30130773/viewspace-2122660/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值