ORACLE:如何将BLOB转换为VARCHAR2

时间:2016-09-09 10:31:21

标签: sql oracle plsql blob

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

if ($('script[src="myResource.js"]').length > 0){
    // script is loaded
}else{
    // not loaded
}

结果:

?????

点Ç.A我8GB ?? 2F ?? MC C:?!??0:????????B n的7I 1M9s ???? S上6gv一个 - ] Y ?m ?? - ; r ?? 2n?B?20?S?4n ?? l?%d?EM?9?q?3?m ?? d? ???? ??? 3E [?? M1OÑ???米??“????9米??????%`??;?2 N ???一个X ????? 7 > 9V ??? |?m???n?9i???4H??o??k????N?.u???2xk?6y@??c?G??U ?? ??#乙???????? 5〜?GC?$ ????我?ü14 b ???????? T 530 1FB?_ -6 K -1 EK ?? ?wk嗨??? S?t ???> ??& i?p ??

2 个答案:

答案 0 :(得分:2)

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 /比重计/ 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 /

答案 1 :(得分:1)

我不能保证这在您的情况下有效,但是,采用2种方法可以解决问题:

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

    this.http.get('http://localhost/script.php').subscribe((result) => { console.log(result); });

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

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
;