zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    容器虚拟化之LXC(LinuX Container)
    Twemproxy+Keepalived+Redis
    Haproxy+Keepalived+Nginx
    Redis-sentinel集群
    Server2008r2 指定默认用户自动登录--注册表
    .Net Core应用框架Util介绍(二) 转
    .Net Core应用框架Util介绍(一)转
    一分钟教你知道乐观锁和悲观锁的区别
    设置DataTable行属性
    js中的内置对象
  • 原文地址:https://www.cnblogs.com/gzyfj/p/12621980.html
Copyright © 2011-2022 走看看