【问题标题】:How to parse BLOB datatype?如何解析 BLOB 数据类型?
【发布时间】:2020-10-16 19:52:01
【问题描述】:

我有一个这样的 BLOB 数据:

{.\.r.t.f.1.\.d.e.f.f.0.T.a.b.l.o.S.i.m.p.l.e...

我需要用 Tablo 分隔符分成 2 列,如下所示:

  1. blob 列:
{.\.r.t.f.1.\.d.e.f.f.0.
  1. blob 列:
S.i.m.p.l.e...

分隔符十六进制代码

2A002A007400610062006C006F002A002A00 --> **Tablo**

Blob数据长度大于10000,最大数据3162910。

我尝试了 dbms_lob.substr、dbms_lob.instr 与十六进制代码、blob_to_clob 转换等,但我做不到。

我该怎么做?

【问题讨论】:

  • 你应该先转换成clob吗?看看这个:convert to clob
  • 我可以转换为 clob,但拆分后我无法再次转换为 blob。

标签: oracle plsql blob


【解决方案1】:

您需要先将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 的 BLOB,显然我们假设 BLOB 实际上是一个存储为二进制对象的字符串。

SELECT BLOB_TO_CHAR(p1_blob => your blob column ) from your table ;

然后,由于输出为 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,但拆分后我无法再次转换为 blob。我需要相同的 blob 值,只需拆分即可。
  • 所以你转换为 clob,然后你拆分你的 clob 。也许您需要另一个函数来再次转换回 blob。
  • 嗨@phe。我添加了一个函数来转换回 blob
猜你喜欢
  • 2012-10-23
  • 2023-04-02
  • 1970-01-01
  • 2019-03-23
  • 1970-01-01
  • 2015-12-09
  • 2020-01-12
  • 1970-01-01
  • 2013-06-24
相关资源
最近更新 更多