[oracle_br] Re: Retornar nome dos arquivos de um diretório Windows

2012-08-13 Por tôpico J. Laurindo Chiappa
Bem, eu não tenho aqui mais comigo pra testar nem o 9ir2, quanto mais o quase 
pré-histórico 9i original que vc diz que está usando, mas se vc quer fazer uma 
chamada ao SO de dentro do database (no caso fazendo um DIR pra saber lista de 
arqs, mas fosse qual fosse o comando), imho a maneira mais fácil seria usar 
Java, isso é ** Óbvio ** Desde Que vc tenha Java instalado nesse database E 
seja autorizado a usá-lo... 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:439619916584 
tem um exemplo feito no 8i, então Creio que deve rodar também no 9i, tenta lá, 
em caso de erros manda Exatamente as telas com os comandos que vc usou no 
sqlplus , Bem Como que se pode palpitar mais
 Caso vc não tenha Java e/ou Autorização para o usar, uma segunda 
possibilidade, MUITO mais trabalhosa mas que deve funcionar, é vc escrever um 
daemon, ie, um programinha que fica rodando em background no SO e 
constantemente aguarda receber um comando a executar (seja via pipe, seja via 
arquivo-texto), aí de dentro do banco vc cria o arquivo-texto ou envia o pipe 
que o daemon espera : 
http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:16212348050 
tem um exemplo em shell script (C-shell no caso, mas facilmente pode ser 
adaptado para outros), e googlando vc acha exemplos feitos em pro*C, perl, C#, 
.NET e outras tools/linguagens externas ao database, veja lá...
 
  []s
  
Chiappa


--- Em oracle_br@yahoogrupos.com.br, Sergio sergiofp413@... escreveu

 Bom dia!
 
 Estou utilizando o Oracle 9.0.1.1.1
 Tenho uma procedure que necessita checar sequenciação e processar vários
 arquivos texto de um determinado diretório Windows.
 O processamento dos arquivos texto com UTL_FILE não tenho problemas, pois
 uso com frequência, mas sempre com um arquivo.
 Pesquisei as alternativas abaixo, mas todas me levaram a um beco sem saída:
 
 1-Utilização de rotina Java
 Mesmo seguindo todos os detalhes de criação, grants e etc sempre
 apresenta erro.
 
 2-DBMS.BACKUP_RESTORE_FILES.SEARCHFILES
 o SEARCHFILES não esta disponível na versão 9.0.1.1.1
 
 Alguém tem uma procedure de exemplo que funcione na minha versão?
 
 Abraços
 Sérgio
 
 
 [As partes desta mensagem que não continham texto foram removidas]





[oracle_br] Re: Retornar nome dos arquivos de um diretório Windows

2012-08-13 Por tôpico J. Laurindo Chiappa
  Ah, e claro : eu não citei, mas SEMPRE há a possibilidade low-tech de vc 
iniciar a carga/manipulação dos arquivos via shell script (script .BAT no caso 
do Windows), que resida no servidor de database junto com os arquivos a 
manipular, que faça um DIR  arquivosaida.lst e aí via logo depois esse mesmo 
.BAT aciona um script sql*plus que chama uma procedure PL/SQL que via UTL_FILE 
mesmo lê o arquivosaida.lst, SE a rotina pode ser executada de fora do database 
inicialmente, talvez pela tela da aplicação, ou por um Operador  
  
   []s
   
  Chiappa

--- Em oracle_br@yahoogrupos.com.br, J. Laurindo Chiappa jlchiappa@... 
escreveu

 Bem, eu não tenho aqui mais comigo pra testar nem o 9ir2, quanto mais o quase 
 pré-histórico 9i original que vc diz que está usando, mas se vc quer fazer 
 uma chamada ao SO de dentro do database (no caso fazendo um DIR pra saber 
 lista de arqs, mas fosse qual fosse o comando), imho a maneira mais fácil 
 seria usar Java, isso é ** Óbvio ** Desde Que vc tenha Java instalado nesse 
 database E seja autorizado a usá-lo... 
 http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:439619916584
  tem um exemplo feito no 8i, então Creio que deve rodar também no 9i, tenta 
 lá, em caso de erros manda Exatamente as telas com os comandos que vc usou no 
 sqlplus , Bem Como que se pode palpitar mais
  Caso vc não tenha Java e/ou Autorização para o usar, uma segunda 
 possibilidade, MUITO mais trabalhosa mas que deve funcionar, é vc escrever um 
 daemon, ie, um programinha que fica rodando em background no SO e 
 constantemente aguarda receber um comando a executar (seja via pipe, seja via 
 arquivo-texto), aí de dentro do banco vc cria o arquivo-texto ou envia o pipe 
 que o daemon espera : 
 http://asktom.oracle.com/pls/apex/f?p=100:11:0P11_QUESTION_ID:16212348050 
 tem um exemplo em shell script (C-shell no caso, mas facilmente pode ser 
 adaptado para outros), e googlando vc acha exemplos feitos em pro*C, perl, 
 C#, .NET e outras tools/linguagens externas ao database, veja lá...
  
   []s
   
 Chiappa
   
 
 --- Em oracle_br@yahoogrupos.com.br, Sergio sergiofp413@ escreveu
 
  Bom dia!
  
  Estou utilizando o Oracle 9.0.1.1.1
  Tenho uma procedure que necessita checar sequenciação e processar vários
  arquivos texto de um determinado diretório Windows.
  O processamento dos arquivos texto com UTL_FILE não tenho problemas, pois
  uso com frequência, mas sempre com um arquivo.
  Pesquisei as alternativas abaixo, mas todas me levaram a um beco sem saída:
  
  1-Utilização de rotina Java
  Mesmo seguindo todos os detalhes de criação, grants e etc sempre
  apresenta erro.
  
  2-DBMS.BACKUP_RESTORE_FILES.SEARCHFILES
  o SEARCHFILES não esta disponível na versão 9.0.1.1.1
  
  Alguém tem uma procedure de exemplo que funcione na minha versão?
  
  Abraços
  Sérgio
  
  
  [As partes desta mensagem que não continham texto foram removidas]
 





[oracle_br] Re: Retornar nome dos arquivos de um diretório Windows

2012-08-13 Por tôpico ederson2001br
Sergio,

Estava lendo a resposta 109582 do Chiappa e fiquei pensando, talvez vc possa 
testar uma variação que não usa JAVA e faz um mix das formas externas de 
disparo.

-No Windows, faça pelo Agendador de Tarefas, uma execução a cada 1h (ou 30 
minutos) de um arquivo verifica.bat que contenha:

cd /pasta
dir *.txt /b  listarq.dat

-No Oracle, crie uma tabela externa, conforme exemplo em 
http://www.oracle-developer.net/display.php?id=204 abrindo como table, o 
arquivo listarq.dat criado pelo .bat acima.

-No Oracle, crie outra tabela para sinalizar a tabela processada, onde a sua 
procedure deve atualizar esta tabela após o processamento de cada arquivo, 
contendo:
nomearquivo varchar2(20);
dataprocessamento   date;
linhasprocessadas   number;
...demais informações

-Desta forma, mesmo que sejam removidos os arquivos TXT do diretório, vc terá 
registrado em tabela, qual arquivo já foi processado.

-Liste para processar somente aqueles que sobrarem de um MINUS entre as duas 
tabelas, carregando um cursor com o resultado. No loop, processe o arquivo com 
o utl_file, salve na tabela de arquivos processados.

-Vc pode até programar um JOB para rodar a cada 15minutos, que chame a sua 
procedure. Basta que vc prepare a procedure para testar o resultado do cursor: 
se %FOUND executa, senão EXIT.


Ederson Elias
DBA Oracle
http://br.linkedin.com/pub/ederson-elias/24/8b/8b0


--- Em oracle_br@yahoogrupos.com.br, Sergio sergiofp413@... escreveu

 Bom dia!
 
 Estou utilizando o Oracle 9.0.1.1.1
 Tenho uma procedure que necessita checar sequenciação e processar vários
 arquivos texto de um determinado diretório Windows.
 O processamento dos arquivos texto com UTL_FILE não tenho problemas, pois
 uso com frequência, mas sempre com um arquivo.
 Pesquisei as alternativas abaixo, mas todas me levaram a um beco sem saída:
 
 1-Utilização de rotina Java
 Mesmo seguindo todos os detalhes de criação, grants e etc sempre
 apresenta erro.
 
 2-DBMS.BACKUP_RESTORE_FILES.SEARCHFILES
 o SEARCHFILES não esta disponível na versão 9.0.1.1.1
 
 Alguém tem uma procedure de exemplo que funcione na minha versão?
 
 Abraços
 Sérgio
 
 
 [As partes desta mensagem que não continham texto foram removidas]