Publicado por: Gustavo Henrique | Abril 17, 2008

Importando Arquivos Textos direto para o Firebird.

Isto só é possível com a criação externa de tabelas.

CREATE TABLE PAGAMENTOIMPORTACAO EXTERNAL ‘/home/sistemas/teste/Importa’ (
    EMPRESA       CHAR(3) CHARACTER SET NONE,
    FILIAL        CHAR(2) CHARACTER SET NONE,
    DEPARTAMENTO  CHAR(3) CHARACTER SET NONE,
    SETOR         CHAR(3) CHARACTER SET NONE,
    FILREG        CHAR(2) CHARACTER SET NONE,
    FICHAREG      CHAR(6) CHARACTER SET NONE,
    CODIGO        CHAR(3) CHARACTER SET NONE,
    NUMHORAS      CHAR(5) CHARACTER SET NONE,
    VALHORAS      CHAR(7) CHARACTER SET NONE,
    BASE          CHAR(12) CHARACTER SET NONE,
    VALOR         CHAR(12) CHARACTER SET NONE,
    CTRL          CHAR(2) CHARACTER SET NONE
);

o caminho REAL do SERVIDOR onde ficará o arquivo é “/home/sistemas/teste/Importa”,

no final é obrigatório a utilização do “CTRL CHAR(2) CHARACTER SET NONE”, que indica a mudança de linha.

criei uma outra stored procedure que lê tudo o que está nessa tabela e insere na minha tabela real, realizando as conversões.

 

CREATE PROCEDURE SP_PAGIMPORTACAO_CONVERSAO (
    IPDATA DATE)
AS
DECLARE VARIABLE VEMPRESA CHAR(3);
DECLARE VARIABLE VFILIAL CHAR(2);
DECLARE VARIABLE VDEPARTAMENTO CHAR(3);
DECLARE VARIABLE VSETOR CHAR(3);
DECLARE VARIABLE VFILREG CHAR(2);
DECLARE VARIABLE VFICHAREG CHAR(6);
DECLARE VARIABLE VCODIGO CHAR(3);
DECLARE VARIABLE VNUMHORAS CHAR(5);
DECLARE VARIABLE VVALHORAS CHAR(7);
DECLARE VARIABLE VBASE CHAR(12);
DECLARE VARIABLE VVALOR CHAR(12);
DECLARE VARIABLE VMES VARCHAR(3);
DECLARE VARIABLE VSTRINGSQL VARCHAR(100);
DECLARE VARIABLE OPEMPRESA INTEGER;
DECLARE VARIABLE OPFILIAL INTEGER;
DECLARE VARIABLE OPDEPARTAMENTO INTEGER;
DECLARE VARIABLE OPSETOR INTEGER;
DECLARE VARIABLE OPFILREG INTEGER;
DECLARE VARIABLE OPFICHAREG INTEGER;
DECLARE VARIABLE OPCODIGO INTEGER;
DECLARE VARIABLE OPNUMHORAS NUMERIC(3,2);
DECLARE VARIABLE OPVALHORAS NUMERIC(5,2);
DECLARE VARIABLE OPBASE NUMERIC(10,2);
DECLARE VARIABLE OPVALOR NUMERIC(10,2);
begin
    FOR
        SELECT EMPRESA, FILIAL, DEPARTAMENTO, SETOR, FILREG, FICHAREG, CODIGO, NUMHORAS, VALHORAS, BASE, VALOR
        FROM PAGAMENTOIMPORTACAO
        INTO :VEMPRESA, :VFILIAL, :VDEPARTAMENTO, :VSETOR, :VFILREG, :VFICHAREG, :VCODIGO, :VNUMHORAS, :VVALHORAS, :VBASE, :VVALOR
    DO
    BEGIN
        OPEMPRESA = CAST(:VEMPRESA AS INTEGER);
        OPFILIAL = CAST(:VFILIAL AS INTEGER);
        OPDEPARTAMENTO = CAST(:VDEPARTAMENTO AS INTEGER);
        OPSETOR = CAST(:VSETOR AS INTEGER);
        OPFILREG = CAST(:VFILREG AS INTEGER);
        OPFICHAREG = CAST(:VFICHAREG AS INTEGER);
        OPCODIGO = CAST(:VCODIGO AS INTEGER);
        OPNUMHORAS = CAST(SUBSTR(:VNUMHORAS,1,3) || + ‘.’ || + SUBSTR(:VNUMHORAS,4,6) AS NUMERIC (3,2));
        OPVALHORAS = CAST(SUBSTR(:VVALHORAS,1,5) || + ‘.’ || + SUBSTR(:VVALHORAS,6,8) AS NUMERIC (5,2));
        OPBASE = CAST(SUBSTR(:VBASE,1,10) || + ‘.’ || + SUBSTR(:VBASE,11,12) AS NUMERIC (10,2));
        OPVALOR = CAST(SUBSTR(:VVALOR,1,10) || + ‘.’ || + SUBSTR(:VVALOR,11,12) AS NUMERIC (10,2));

        INSERT INTO PAGAMENTO (EMPRESA, FILIAL, DEPARTAMENTO, SETOR, FILREG, FICHAREG, CODIGO, NUMHORAS, VALHORAS, BASE, VALOR, DATA)
        VALUES (:OPEMPRESA, :OPFILIAL, :OPDEPARTAMENTO, :OPSETOR, :OPFILREG, :OPFICHAREG, :OPCODIGO, :OPNUMHORAS, :OPVALHORAS, :OPBASE, :OPVALOR, :IPDATA);
    END
end


Deixe uma resposta

Sua resposta:

Categorias