Oracle 如何解析BLOB数据类型?

Oracle 如何解析BLOB数据类型?,oracle,plsql,blob,Oracle,Plsql,Blob,我有一个BLOB数据,如下所示: {.\.r.t.f.1.\.d.e.f.f.0.T.a.b.l.o.S.i.m.p.l.e... 我需要用Tablo分隔符拆分成两列,如下所示: {.\.r.t.f.1.\.d.e.f.f.0.T.a.b.l.o.S.i.m.p.l.e... blob列: blob列: 分隔符十六进制代码 2A002A007400610062006C006F002A002A00 --> **Tablo** Blob数据长度大于10000,最大数据3162910 我尝

我有一个BLOB数据,如下所示:

{.\.r.t.f.1.\.d.e.f.f.0.T.a.b.l.o.S.i.m.p.l.e...
我需要用Tablo分隔符拆分成两列,如下所示:

{.\.r.t.f.1.\.d.e.f.f.0.T.a.b.l.o.S.i.m.p.l.e...
  • blob列:
  • blob列:
  • 分隔符十六进制代码

    2A002A007400610062006C006F002A002A00 --> **Tablo**
    
    Blob数据长度大于10000,最大数据3162910

    我尝试了dbms_lob.substr、dbms_lob.instr和十六进制代码、blob_到clob转换等,但我做不到


    我该怎么做呢?

    您需要先将BLOB转换为CLOB,然后才能将CLOB视为字符串

        create or replace function blob_to_char (p1_blob BLOB)
    return clob is
      out_clob clob;
      n number;
    begin
      if (p1_blob is null) then
        return null;
      end if;
      if (length(p1_blob)=0) then
        return empty_clob();
      end if;
      dbms_lob.createtemporary(out_clob,true);
      n:=1;
      while (n+32767<=length(p1_blob)) loop
        dbms_lob.writeappend(out_clob,32767,utl_raw.cast_to_varchar2(dbms_lob.substr(p1_blob,32767,n)));
        n:=n+32767;
      end loop;
      dbms_lob.writeappend(out_clob,length(p1_blob)-n+1,utl_raw.cast_to_varchar2(dbms_lob.substr(p1_blob,length(p1_blob)-n+1,n)));
      return out_clob;
    end;
    /
    
    然后,由于输出是CLOB,您可以应用dbms_lob.substr或任何其他函数

    转换回BLOB的附加功能

        create or replace function clob_to_blob (p1_clob CLOB) return BLOB is
      Result BLOB;
      o1 integer;
      o2 integer;
      c integer;
      w integer;
    begin
      o1 := 1;
      o2 := 1;
      c := 0;
      w := 0;
      DBMS_LOB.CreateTemporary(Result, true);
      DBMS_LOB.ConvertToBlob(Result, p1_clob, length(p1_clob), o1, o2, 0, c, w);
      return(Result);
    end clob2blob;
    /
    
    以clob格式在列中应用任何拆分后,使用此函数将其转换回blob


    希望能有所帮助

    也许你应该先转换成clob?检查这个:我可以转换成clob,但是在分割之后我不能再转换成blob。我可以转换成clob,但是在分割之后我不能再转换成blob。我需要相同的blob值,只需将其拆分。因此,转换为clob,然后拆分clob。也许您需要使用另一个函数来再次转换回blob.Hi@phe。我添加了一个函数来转换回blob
    SELECT BLOB_TO_CHAR(p1_blob => your blob column ) from your table ;
    
        create or replace function clob_to_blob (p1_clob CLOB) return BLOB is
      Result BLOB;
      o1 integer;
      o2 integer;
      c integer;
      w integer;
    begin
      o1 := 1;
      o2 := 1;
      c := 0;
      w := 0;
      DBMS_LOB.CreateTemporary(Result, true);
      DBMS_LOB.ConvertToBlob(Result, p1_clob, length(p1_clob), o1, o2, 0, c, w);
      return(Result);
    end clob2blob;
    /