[firebase-br] Rotina no banco para Ler Arquivo Texto

Mr.Mothman mr.mothman em gmail.com
Sáb Out 8 11:31:27 -03 2005


Caro Marco Aurélio,

  Uma UDF não...

  Porém você pode, assim como no Oracle, fazer uso de uma tabela de
referência externa...

  Exemplo?

  Imagine que você tenha uma tabela com a estrutura abaixo:

  TIPO CHAR (5)
  DESC VARCHAR (10)
  CEP VARCHAR(8)
  UF CHAR (2)

  Para importar dados para esta tabela, você precisaria de:

  1) um arquivo com registros de tamanho fixo seguindo os tamanhos
propostos acima;
  2) uma tabela externa com campos de tamanho fixo seguindo os
tamanhos propostos acima (no firebird 1.5 é necessário informar os
paths dos arquivos externos. Vide arquivo firebird.conf no Linux. O
arquivo texto acima deverá estar neste path antes de se criar a
tabela.)
  3) uma query para inserir dados na tabela destino interna os dados
da tabela origem externa, com os devidos type castings.

  Observação: geralmente, todo registro num arquivo texto possui um
finalizador de linha... No Windows este finalizador são os caracteres
CR + LF (chr (13) + chr (10), carriage return + line feed, Enter +
salto de linha). No Linux (o arquivo que está em anexo foi criado no
Linux...) o finalizador de linha é o caracter Line Feed. Portanto, o
último campo de sua tabela deverá ser um campo para comportar estes
finalizadores.

  Vamos botar a mão na massa:

  1) Configure seu Firebird para poder acessar o arquivo texto em
anexo numa pasta qualquer e grave o arquivo que segue anexo nesta
pasta;
  2) crie a tabela proposta acima;
  3) crie a tabela externa seguint a sintaxe abaixo:

  CREATE TABLE TESTE_EXT EXTERNAL '<PATH>/exemplo.txt'
  (
    TIPO CHAR (5),
    DESC CHAR (10),
    CEP CHAR(8),
    UF CHAR (2),
    NEWLINE CHAR (1)
  );

  Pronto. Neste ponto, caso você execute um select na tabela
TESTE_EXT, os dados que existem no arquivo exemplo.txt serão listados
e podem ser incluídos numa boa em outra tabela (na nossa tabela
interna de exemplo...).

  Caso seja de interesse geral, posso escrever um artigo sobre este
tema, inclusive com exemplos mais elaborados e com configurações para
o Firebird Linux e Windows, porém o exemplo acima já é utilizável.

  Aguardo um feedback da comunidade.

  [ ]´s

  Mr.Mothman
-------------- Próxima Parte ----------
NOVOACIDADE DEF04001001SP
NOVOBCIDADE NEW04501003SP
NOVOCCIDADE VEL01521022SP
NOVODCIDADE    01555032SP
NOVOECIDADE RJ 21001001RJ
NOVOFCIDADE    11111111  
     NADA MESMO22222222  
NADA EM BRANCO 00000000AA


Mais detalhes sobre a lista de discussão lista