PL/SQL Wrapper

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (0)  (0)

Conheça a rotina Wrapper.


Olá pessoal,

 

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>

 

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.

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

(disponível para download no endereço http://www.oracle.com/pls/db102/homepage )

 

Por hoje é tudo pessoal,

 

Até o próximo artigo,

 

André Luiz Gomes Antunes

“Keeping IT Running”

 

 

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?