【问题标题】:ORACLE: How to convert BLOB to VARCHAR2ORACLE:如何将 BLOB 转换为 VARCHAR2
【发布时间】:2017-01-17 11:35:55
【问题描述】:

我有一个具有 BLOB 数据类型的表。我想获取 BLOB 的值并将其转换为 Varchar2 或字符串文本可读格式。我正在使用下面的代码。预期的结果只是一个字符串 varchar2。但是它返回我无法阅读的特殊字符。 SQL:

 select UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(MY_FIELD_BLOB_TYPE))
  from MY_BLOB_TABLE 
  where MY_BLOB_TABLE_ID = 12345
  ;

结果:

?p?C?.a?I?8gb?!??2f??mc?c?:0?:b?n?7i?1M9s????S?a?6gv?a]?y ?m??-;???r??2n?B?20???S?4n??l?%d???EM?9 ?q???3 ?m??d? ???3e???[??M1o?n???m??'????9m??????%?`??;n???a?X??????7 >9v???|?m???n?9i???4H??o??k????N?.u???2xk?6y@??c?G??U??? ?#B????????5~?Gc?$????My?u??b????????T???1fb?_??k?ek??? wk Hi???S?t???>??&i?p??

【问题讨论】:

  • 那么预期的输出是什么?
  • 你在 BLOB 中存储了什么?这些是不必包含文本的二进制数据类型...
  • 大家好,我期待一个没有 RTF 格式的字符串文本输出。我可以使用我看不到代码的 3rd 方应用程序查看预期的字符串文本输出。所以这些值只是纯字符串。

标签: sql oracle plsql blob


【解决方案1】:
SELECT utl_raw.cast_to_varchar2( utl_encode.base64_encode( utl_raw.cast_to_raw( UTL_RAW.CAST_TO_VARCHAR2(dbms_lob.substr(MY_FIELD_BLOB_TYPE)))))
FROM MY_BLOB_TABLE
WHERE MY_BLOB_TABLE_ID = 12345;

结果: P3A/Qz8uYT9JPzhnYj8hPz8yZj8/bWM/Yz86MD86Yj9uPzdpPzFNOXM/Pz8/Uz9h PzZndj9hXT95P20/Py07Pz8/cj8/Mm4/Qj8yMD8/P1M/NG4/P2w/JWQ/Pz9FTT85 ID9xPz8/MyA/bT8/ZD8gPz8/M2U/Pz9bPz9NMW8/bj8/P20/Pyc/Pz8/OW0/Pz8/ Pz8lP2A/PztuPz8/YT9YPz8/Pz83ID45dj8/P3w/bT8/P24/OWk/Pz80SD8/bz8/ az8/Pz9OPy51Pz8/MnhrPzZ5QD8/Yz9HPz9VPz8/PyNCPz8/Pz8/Pz81fj9HYz8k Pz8/P015P3U/P2I/Pz8/Pz8/P1Q/Pz8xZmI/Xz8/az9laz8/P3drIEhpPz8/Uz90 pz8/Pj8/Jmk/cD8/

【讨论】:

    【解决方案2】:

    我不能保证这适用于您的情况,但是,使用 2 件事可以解决问题:

    • 意识到 oracle 一次只能处理 2000 个字符
    • 被告知此类 blob 列已压缩

      select UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(UTL_COMPRESS.LZ_UNCOMPRESS(MY_FIELD_BLOB_TYPE),2000,1)) from MY_BLOB_TABLE where MY_BLOB_TABLE_ID = 12345 ;

    要获取接下来的 2000 个字符,您需要更改 substr 范围:

    utl_compress.lz_uncompress(MY_FIELD_BLOB_TYPE),2000,2001)
    

    【讨论】:

      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 2014-08-24
      • 1970-01-01
      • 2020-12-20
      • 2011-11-28
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多