|
1.UTL_COMPRESSs.LZ_UNCOMPRESS的返回值到底是什么?
要用到下面的知识
如何识别Zlib编码
http://book.51 cto.com/art/200903/112931.htm 提到
从数据上说使用Zlib压缩的数据开头第一个字节是"x78",ASCII码是"x",而gzip的格式见附件
因此,可以认为,UTL_COMPRESSs.LZ_UNCOMPRESS返回的是gzip的格式
而select amosunwrapper.deflate见(http://www.itpub.net/viewthread. ... p;extra=&page=3)才返回真实的lz格式
2.UTL_COMPRESSs.LZ_UNCOMPRESS的传入参数是什么?
是raw还是varchar字符串?
SQL> select utl_compress.LZ_COMPRESS(utl_raw.CAST_TO_RAW('PACKAGE')) from dual;
UTL_COMPRESS.LZ_COMPRESS(UTL_R
--------------------------------------------------------------------------------
1F8B080000000000000B0B7074F676747705008F992DE107000000
SQL> select utl_compress.LZ_COMPRESS('PACKAGE') from dual;
select utl_compress.LZ_COMPRESS('PACKAGE') from dual
*
第 1 行出现错误:
ORA-01465: 无效的十六进制数字
可见参数是raw类型,用16进制表示
3.lz格式与gzip的关系
SQL> select utl_compress.LZ_COMPRESS(utl_raw.CAST_TO_RAW('PACKAGE')) from dual;
UTL_COMPRESS.LZ_COMPRESS(UTL_R
--------------------------------------------------------------------------------
1F8B080000000000000B0B7074F676747705008F992DE107000000
SQL> select amosunwrapper.deflate('PACKAGE',9) from dual;
AMOSUNWRAPPER.DEFLATE('PACKAGE
--------------------------------------------------------------------------------
78DA0B7074F6767477050007CE01ED00000000000000000000000000000000000000000000000000
SQL> select amosunwrapper.deflate('FUNCTION',9) from dual;
AMOSUNWRAPPER.DEFLATE('FUNCTIO
--------------------------------------------------------------------------------
78DA730BF5730EF1F4F703000AC50267000000000000000000000000000000000000000000000000
SQL> select utl_compress.LZ_COMPRESS(utl_raw.CAST_TO_RAW('FUNCTION')) from dual;
UTL_COMPRESS.LZ_COMPRESS(UTL_R
--------------------------------------------------------------------------------
1F8B080000000000000B730BF5730EF1F4F70300718A9D0C08000000
DEFLATE返回值的很多尾部0是没用的,去掉也能解压。
SQL> select amosunwrapper.deflate('41424344')from dual;
AMOSUNWRAPPER.DEFLATE('4142434
--------------------------------------------------------------------------------
789C333134313231363101000736019B000000000000000000000000000000000000000000000000
SQL> select amosunwrapper.inflate('78DA333134313231363101000736019B') from dual;
AMOSUNWRAPPER.INFLATE('78DA333
--------------------------------------------------------------------------------
41424344
[ 本帖最后由 〇〇 于 2009-6-19 13:08 编辑 ] |
|