• oracle将blob转为varchar2


    因为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

  • 相关阅读:
    回车符和换行符
    UDP ECHO server
    启动LINUX下的TFTP服务器
    WPF版的Dock控件第二版完成
    最近写的一个WPF版的Dock控件
    搜狗开始耍流氓了
    对WebBrowser控件设置代理
    删除Jumplist中的历史记录
    C#中Undo/Redo的一个简易实现
    如何向枚举中添加新值
  • 原文地址:https://www.cnblogs.com/gzyfj/p/12621980.html
Copyright © 2020-2023  润新知