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