Olá pessoa, passei por um problema aqui na empresa e vou compartilhar com
os colegas...

Eu tenho um diretório no Linux, que caem diversos arquivos, e tenho um
Shell que lê estes arquivos e importa para o banco de dados., Entretanto
tive que processar um retorno SEFAZ o arquivo não é padronizado então o
Shell estava com problemas de processar os arquivos. Resumindo, o
faturamento parou.

Bom minhas alternativas...

Colocar um novo Shell para importar os arquivos da sefaz ou fazer com que
o oracle importe estes arquivos, PL/SQL ou Java. sem a ajuda do Shell. A
melhor solução que eu achei foi esta, isso ao meu ver.


CREATE OR REPLACE PROCEDURE list_directory
 (directory VARCHAR2)
 IS
     ns          VARCHAR2(1024);
     v_directory VARCHAR2(1024);
 BEGIN
      v_directory := directory;
      SYS.DBMS_BACKUP_RESTORE.SEARCHFILES(v_directory, ns);
 FOR each_file IN (SELECT fname_krbmsft AS name FROM x$krbmsft) LOOP
     DBMS_OUTPUT.PUT_LINE(each_file.name);
 END LOOP;
 END;
 /
SQL> SET SERVEROUTPUT ON;

SQL> EXECUTE sys.list_directory('/u01/app/oracle/admin/testdb/bdump');
/u01/app/oracle/admin/testdb/bdump/alert_testdb.LOG
/u01/app/oracle/admin/testdb/bdump/testdb_lgwr_6884.trc
/u01/app/oracle/admin/testdb/bdump/testdb_lgwr_10639.trc
/u01/app/oracle/admin/testdb/bdump/testdb_lgwr_10724.trc
/u01/app/oracle/admin/testdb/bdump/testdb_lgwr_3618.trc
/u01/app/oracle/admin/testdb/bdump/testdb_lgwr_10785.trc

PL/SQL PROCEDURE successfully completed.

Posso pegar o retorno da procedure e colocar em uma tabela temporária,
depois disso passo o nome do arquivo para a procedure que vai ler e
inserir no banco o conteúdo do arquivo..,

Este é o link do site, tem exemplos Java também..

http://birijan.com.np/?q=plsq+directory+listing

Att,

Welvis Douglas da Silva Moretto
OCP DBA 10g - OCE Sql
Fone:  (41) 9997-6297
E-mail:    welvis_doug...@hotmail.com, welvis.m...@terceiros.stcruz.com.br



Responder a