PL/SQL Wrapper
Conheça a rotina Wrapper.
Muitas vezes necessitamos enviar aplicações de PL/SQL para instalação em ambientes externos ao de nossa instalação. O código enviado, de um modo geral, fica exposto e passível de modificações indesejáveis. A rotina Wrapper tem a finalidade de criptografar o código-fonte de tal forma que somente o Oracle tenha condições de ler e compilar o texto gerado.
Tem como Características:
- Converte o código-fonte de PL/SQL em uma forma intermediária de código-objeto.
- Código-objeto gerado é portável como se fosse o próprio fonte.
- O compilador PL/SQL reconhece e carrega o código gerado pelo Wrapper automaticamente.
Tem como Vantagens:
- Impede que o código-fonte seja manuseado por outros desenvolvedores;
- Independência de plataforma, já que se trata de uma versão de código portável;
- As referências a variáveis Bind externas são resolvidas a tempo de carga;
- Os processos de Import / Export normais aceitam arquivos gerados pela rotina Rappel.
Criando o código intermediário:
A rotina Wrapper não é executada pelo banco de dados. É uma rotina externa e deve ser executada no sistema operacional em uso. No caso da instalação em Windows, ela se encontra no diretório <Oracle Home>\bin e se chama Wrap.exe.
Sintaxe Wrapper: wrap iname=<nome fonte>oname=<nome codigo></nome>
Não deve haver espaço nem antes nem depois dos sinais de igual. A extensão default para arquivo de entrada é .SQL e para arquivo de saída é .PLB. Caso o arquivo de saída não seja especificado, será gerado com o mesmo nome do arquivo de entrada, com apenas a diferença de extensão.
Tem como Restrições:
Não podemos passar para a rotina Wrapper um bloco anônimo de PL/SQL.1
Apenas fontes contendo os comandos a seguir podem ser codificadas:
- create procedure;
- create function;
- create package;
- create package body;
Todos os outros comandos são passados intactos para o arquivo de saída. As linhas com comentários (contendo REM ou --) são removidas do código gerado a menos que estejam incluídas na parte de especificação.
Criação da rotina Master:
SQL> CREATE OR REPLACE PROCEDURE MASTER IS
RETORNO NUMBER;
TEXTO VARCHAR2(100);
BEGIN
RETORNO := DBMS_PIPE.RECEIVE_MESSAGE( 'Teste',20);
IF RETORNO <> 0 THEN
RAISEN_APPLICATION_ERROR ( -20002, 'erro na recepção da ' || 'mensagem do Pipe -
'||Retorno);
ELSE
LOOP
RETORNO := DBMS_PIPE..NEXT_ITEM_TYPE;
EXIT WHEN RETORNO = 0;
DBMS_PIPE.UNPACK_MESSAGE(TEXTO);
DBMS.OUT.PUT_LINE(TEXTO);
END LOOP;
END IF;
END;
/
A rotina acima apresenta o comando a ser passado para a rotina Wrap. Nos parâmetros INAME e ONAME podemos informar o diretório completo onde se acham os programas. No exemplo isto não foi feito pois a execução do comando (no DOS) foi feita dentro do diretório onde se achavam o fonte a ser convertido.
Linha de código da Wrap:
wrap iname=103_205.sql oname=s03_205.plb
Trecho de código da rotina MASTER:
SQL> CREATE OR REPLACE PROCEDURE MASTER wrapped
0
abcd
abcd
abcd
abcd
---------------------------------
1UNPACK_MESSAGE;
1DBMS_OUTPUT;
1PUT_LINE;
0
0
0
59
2
0 9a b4 55 6a a3 a0 lc
8l b0 a3 a0 5l0a5 lc 8l
b0 :3 a0 6b 6e 5l a5 b d
a0 7e 5l b4 2e 7e
a0 b4 2e a5 57 b7 :4 a0 6b
d :2 a0 7e 5l b4 2e 2b a0
O código torna-se, de um modo geral, maior que o fonte original.
Para maiores detalhes , você pode ler a PL/SQL User's Guide and Reference
para download no endereçoArtigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo