Oracle如何解压缩Blob

g9icjywg  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(143)

我正在从Oracle表中提取BLOB列。
我得到的一些blob值是正确的字符串字符。
但是,某些blob值没有显示正确的字符串。这些行似乎被**“压缩”了**。

Table Name: TableA
Column Name: ID,                Type: Number
Column Name: BLOB_BINARY_VALUE, Type: BLOB
Column Name: BLOB_COMPRESSED,   Type: Number

下面是我使用的SQL:

Select BLOB_BINARY_VALUE FROM TableA WHERE ID =  1234567;

我也尝试使用:

Select TO_BLOB(BLOB_BIN_VALUE) FROM TableA WHERE ID =  1234567;

我得到的错误Blob值示例:(我修剪了下面的值,因为它的长度)

öp‘CÇL.aÜÌIëÉ8gbȨ!ƒ™2fÌÀÌ…mc›cÆÌ:0óÆ
:bØ>n€7iض1M9sÊТÉSДaÃ6gvôéÓ@;iÊÜY“Æ

我猜这个BLOB是压缩格式的。我怎样才能解压缩这种BLOB?
先谢谢你。

**更新1:**正确的Blob查询的例子,我也期待从别人:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 MS Shell Dlg;}}
\viewkind4\uc1\pard\f0\fs20 MESSAGE HERE MESSAGE HERE MESSAGE HERE.   \par
}

更新二:

数据库中还有一个名为“BLOB_COMPRESSED”的列。具有“0“的行是显示正确值的行。具有“1“的行是显示错误值的行。所以我猜数据被压缩了。

**更新3:**我试图按照这个链接的建议,但仍然得到像压缩字符串:How do I get textual contents from BLOB in Oracle SQL

Select utl_raw.cast_to_varchar2(dbms_lob.substr(BLOB_BIN_VALUE)) 
FROM TableA 
WHERE ID = 1234567;
monwx1rj

monwx1rj1#

这对我很有效:

select  
utl_raw.cast_to_varchar2( dbms_lob.substr( utl_compress.lz_uncompress(BLOB_BIN_VALUE), 2000, 1) )
 from TableA  where ID = <ID>;
eagi6jfj

eagi6jfj2#

这对我们来说是有效的,我们通过Java zip compress压缩了XML负载,并存储在名为payload的BLOB列中:

select utl_compress.lz_uncompress (src => payload) from TABLE_NAME;

相关问题