来自itisamos
http://www.itpub.net/viewthread.php?tid=1154232&extra=page%3D1%26amp%3Bfilter%3Ddigest
create or replace java source named UNWRAPPER
as
import java.io.*;
import java.util.zip.*;
public class UNWRAPPER
{
public static String Inflate( byte[] src )
{
try
{
ByteArrayInputStream bis = new ByteArrayInputStream( src );
InflaterInputStream iis = new InflaterInputStream( bis );
StringBuffer sb = new StringBuffer();
for( int c = iis.read(); c != -1; c = iis.read() )
{
sb.append( (char) c );
}
return sb.toString();
} catch ( Exception e )
{
}
return null;
}
public static byte[] Deflate( String src, int quality )
{
try
{
byte[] tmp = new byte[ src.length() + 100 ];
Deflater defl = new Deflater( quality );
defl.setInput( src.getBytes( "UTF-8" ) );
defl.finish();
int cnt = defl.deflate( tmp );
byte[] res = new byte[ cnt ];
for( int i = 0; i < cnt; i++ )
res = tmp;
return res;
} catch ( Exception e )
{
}
return null;
}
}
/
alter java source UNWRAPPER compile
/
create or replace package amosunwrapper
is
function deflate( src in varchar2 )
return raw;
function deflate( src in varchar2, quality in number )
return raw;
function inflate( src in raw )
return varchar2;
end;
/
create or replace package body amosunwrapper
is
function deflate( src in varchar2 )
return raw
is
begin
return deflate( src, 6 );
end;
function deflate( src in varchar2, quality in number )
return raw
as language java
name 'UNWRAPPER.Deflate( java.lang.String, int ) return byte[]';
function inflate( src in raw )
return varchar2
as language java
name 'UNWRAPPER.Inflate( byte[] ) return java.lang.String';
end;
/
CREATE TABLE IDLTRANSLATE
(
C_BASE64DECODE VARCHAR2(2) NOT NULL,
C_LZDEFLATECODE VARCHAR2(2) NULL
)
/
---
with src AS ( select 'PACKAGE a' txt from dual ),
wrap as ( select src.txt , dbms_ddl.wrap( 'create ' || src.txt ) wrap from src ),
subst as (select substr( utl_encode.base64_decode( utl_raw.cast_to_raw(rtrim( substr( wrap.wrap, instr( wrap.wrap, chr( 10 ), 1, 20 ) + 1 ), chr(10) ) ) ), 41 ) x,
amosunwrapper.deflate( wrap.txt || chr(0), 9 ) d
from wrap )
select substr( x, r * 2 - 1, 2 ) c_base64,
substr( d, r * 2 - 1, 2 ) c_translatecode
from subst , ( select rownum r from dual connect by rownum <= ( select length( x ) / 2 from subst ) );
--
set serveroutput on;
Declare
vWrappedtext Varchar2(32767);
vChar Varchar2(2);
vRepchar Varchar2(2);
vLZinflatestr Varchar2(32767);
nLen Integer;
nLoop Integer;
nCnt Integer;
type vartab is table of varchar2(2) index by varchar2(2);
mytbl vartab;
cursor getchar is select C_BASE64DECODE xr,C_LZDEFLATECODE dr from sys.idltranslate;
Begin
for i in getchar loop --sys.idltranslate表内容存到字符数组
mytbl(i.xr):=i.dr;
end loop;
select substr( utl_encode.base64_decode( utl_raw.cast_to_raw(rtrim( substr( TEXT, instr( TEXT, chr( 10 ), 1, 20 ) + 1 ), chr(10) ) ) ), 41 ) x
Into vWrappedtext
from DBA_SOURCE
Where wner='SYS'
And Name = 'DBMS_OUTPUT'
And Type='PACKAGE BODY' ;
--DBMS_OUTPUT.PUT_LINE(vWrappedtext);
nLen := Length(vWrappedtext)/2 - 1;
vLZinflatestr :='';
For nLoop In 0..nLen Loop
vChar := Substrb(vWrappedtext,nLoop*2+1,2);
/*
Select Count(*) Into nCnt From SYS.IDLTRANSLATE Where C_BASE64DECODE=vChar;
If nCnt <> 1 Then
DBMS_OUTPUT.PUT_LINE('SUBSTATION TABLE WARNING: Count not find following char--'||vChar);
Return;
Else
Select C_LZDEFLATECODE Into vRepchar From SYS.IDLTRANSLATE Where C_BASE64DECODE=vChar;
End If;
*/
vLZinflatestr := vLZinflatestr || mytbl(vChar); --从字符数组匹配
--DBMS_OUTPUT.PUT_LINE(vLZinflatestr);
End Loop;
--DBMS_OUTPUT.PUT_LINE(vLZinflatestr);
DBMS_OUTPUT.PUT_LINE(amosunwrapper.inflate(vLZinflatestr));
End;
/
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14740/viewspace-628765/ ,如需转载,请注明出处,否则将追究法律责任。