sexta-feira, 13 de fevereiro de 2015

MySQL - Loader de Arquivo com Tamanho Fixo (posicional)

Para efetuar o loader de um arquivo fixo (ou posicional), ou seja, um arquivo que não possui delimitadores, existem duas maneiras:

Método 1 - Usar uma tabela de destino com TODOS os campos do arquivo, com tamanho fixo.
Para este método, a tabela de destino deverá possuir, OBRIGATORIAMENTE, a estrutura igual ao do arquivo de origem. No momento do LOADER, utilizar os parâmetros FIELD TERMINATED BY e ENCLOSED BY sem conteúdo ('').

Exemplo:
Arquivo
00101022014FULANO DE TAL  M
00201032014FULANA DO TAL  F

-- Tabela
CREATE TABLE tabela(
  codigo char(3) default null,
  data   char(3) default null,
  nome   char(15) default null,
  sexo   char(1) default null
) engine=MyIsam DEFAULT CHARSET=latin1;

-- Loader
LOAD DATA LOCAL INFILE '/Arquivo'
INTO TABLE tabela
FIELDS TERMINATED BY ''
ENCLOSED BY ''
LINES TERMINATED BY '\n';

-- Verificando se houve erro
show warnings;

Método 2 - Efetuar o LOADER em uma váriável auxiliar (@linha) e depois fazer o set para cada uma das linhas, usando a função SUBSTRING.

Exemplo:
Arquivo
00101022014FULANO DE TAL  M
00201032014FULANA DO TAL  F

-- Tabela
CREATE TABLE tabela(
  codigo int default null,
  nome   varchar(15) default null,
  data   date default null,
  sexo   char(1) default null
) engine=MyIsam DEFAULT CHARSET=latin1;

-- Loader
LOAD DATA LOCAL INFILE '/Arquivo'
INTO TABLE tabela
FIELDS TERMINATED BY ''
ENCLOSED BY ''
LINES TERMINATED BY '\n'
(@linha)
SET codigo = substr(@linha, 1, 3),
    nome = trim(upper(substr(@linha, 12, 15))),
    date = str_to_date(substr(@linha, 4, 8), '%Y%m%d'),
    sexo = substr(@linha, 27, 1)
;

-- Verificando se houve erro
show warnings;


Nenhum comentário:

Postar um comentário