External Table PreProcessor

Neste post bem curto, vou usar uma funcionalidade que demorei um pouco para entender e tive um pouco de dificuldade para fazer o setup da mesma. Mas na verdade ela é bem simples, trata-se da funcionalidade External Table Pre Processor que foi uma funcionalidade introduzida no Oracle 11g e facilita bastante o tratamento dos arquivos de dados em tabelas externas com shell scripts, perl scripts, bat, power shell e etc.

Abaixo o que precisaremos configurar para testar essa funcionalidade:

1) Criar um directory HOME

SQL> CREATE OR REPLACE DIRECTORY HOME AS '/home/oracle';

2) Criar um shell script que vai ser processado antes de carregar os dados da tabela EXTERNAL

cat >> /home/oracle/exec.sh <<EOF
/bin/cat $1
EOF

3) Criar um arquivo que texto para ser processado pelo exec.sh

cat >> /home/oracle/foo.dat <<EOF
Rodrigo
Mufalani
DBA
EOF

Obs.: Esse arquivo vai sofrer um cat, mas poderia ser um unzip, e outros tratamentos pelo shell script.

4) Agora vamos criar a tabela externa xtab que vai pre-processar o arquivo texto através da external table


drop table xtab;

CREATE TABLE xtab (recno varchar2(200))
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY home
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
PREPROCESSOR home:'exec.sh'
FIELDS (recno char(200))
)
LOCATION ('foo.dat')
)
reject limit unlimited ;

5) Teste de leitura na tabela

SQL> select * from xtab;

RECNO
--------------------------------------------------------------------------------
Rodrigo
Mufalani
DBA

Considerações importantes:

Sempre coloque o path completo para os comandos no shell script, /bin/cat, no nosso exemplo.

Att,

Mufalani

 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *