首页 > 数据库技术 > 详细

oracle将blob转为varchar2

时间:2020-04-02 20:12:11      阅读:211      评论:0      收藏:0      [点我收藏+]

因为varchar2最大长度为4000,所以不能直接将blob转为varchar2,这里通过函数将blob返回为table格式来实现:

1、创建两个新的type,用于函数返回

create or replace type obj_table as object
(
  name varchar2(2000)
);
create or replace type t_table is table of obj_table

2、创建blob转varchar2的函数

CREATE OR REPLACE
Function Blob_To_Varchar (id In VARCHAR2) Return t_table
as
  rs t_table:= t_table();-- 定义上面创建的类型
  Blob_In blob;
    V_Varchar Varchar2(2000);
    V_Start Pls_Integer := 1;
    V_Buffer Pls_Integer := 2000;
Begin
 
    SELECT COLIMN_BLOB_NAME into Blob_In FROM table a WHERE a.id= id; -- 根据id查询blob所在的表
    For I In 1..Ceil(Dbms_Lob.Getlength(Blob_In) / V_Buffer) Loop -- 遍历blob
        --当转换出来的字符串乱码时,可尝试用注释掉的函数
        --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));
        rs.extend;-- 扩展已知的数组空间
	rs(rs.count) := obj_table(V_Varchar);-- 往上面创建obj_table中写入数据
	V_Start := V_Start + V_Buffer;
    End Loop;
    Return rs;
End Blob_To_Varchar;

3、查询结果

select * from table(Blob_To_Varchar(id))

执行上面的语句,可获取到对应的blob对应的varchar

技术分享图片

 

oracle将blob转为varchar2

原文:https://www.cnblogs.com/gzyfj/p/12621980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!