[firebase-br] Importar text para a tabela

Igor Alves igor.alvez em gmail.com
Qua Out 13 09:36:49 -03 2010


Eu fiz uma procedure para importar de um arquivo txt os dados a serem
inseridos numa tabela, gostaria que me desse uma ajuda, pois não esta
funcionando.Abaixo está o corpo da procedure

--Variaveis de Leitura
W_REGISTRO                VARCHAR;
W_ARQUIVO                 UTL_FILE.FILE_TYPE;
W_ERR_MSG                 VARCHAR;

--Variaveis de Dados do Arquivo
W_NOME                    VARCHAR;
W_PARCELA                 SMALLINT;
W_INICIO_CONTRATO         DATE;
W_FIM_CONTRATO            DATE;
W_VALOR_LIBERADO          INTEGER;
W_VALOR_OPERACAO          INTEGER;
W_VALOR_PARCELA           INTEGER;
W_SALDO_DEVEDOR           SMALLINT;

--Variaveis para criação de log, caso o emrpestimo ja exista na base.
W_NOME_LOG                VARCHAR;
W_PARCELA_LOG             SMALLINT;
W_INICIO_CONTRATO_LOG     DATE;
W_FIM_CONTRATO_LOG        DATE;
W_VALOR_LIBERADO_LOG      INTEGER;
W_VALOR_OPERACAO_LOG      INTEGER;
W_VALOR_PARCELA_LOG       INTEGER;
W_SALDO_DEVEDOR_LOG       SMALLINT;

--Variaveis de uso global
W_VARIAVEL                INTEGER;
W_COUNT                   INTEGER;
W_LINHA                   INTEGER;
W_CODIGO                  INTEGER;

--Pega o codigo do funcionario
   CURSOR COD_FUNC IS
   SELECT PES_I_COD
   FROM FPGPESSOA
   WHERE PES_A_NOM = W_NOME;

BEGIN

  IF P_NOM_ARQUIVO IS NULL THEN
    RAISE_APPLICATION_ERROR(-20002,' Informe o nome do arquivo a ser
importado.');
  END IF;

  -- Abre arquivo (Parametros: Nome do diretorio,Variavel do nome do
arquivo, e tipo)
  W_ARQUIVO := UTL_FILE.FOPEN ( 'INVENTARIO_DIR', P_NOM_ARQUIVO, 'r');

  W_LINHA :=1;

  LOOP
    -- Lê dados do arquivo
    BEGIN
      UTL_FILE.GET_LINE ( W_ARQUIVO,W_REGISTRO);
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          EXIT;
    END;

   --Obtem do arquivo o nome do funcionário
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_NOME := substr(W_REGISTRO,1,W_VARIAVEL-1);
   W_REGISTRO := substr(W_REGISTRO,W_VARIAVEL+1);

   --Obtem do arquivo o numero da parcela
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_PARCELA := substr(W_REGISTRO,1,W_VARIAVEL-1);
   W_REGISTRO := substr(W_REGISTRO,W_VARIAVEL+1);

   --Obtem do arquivo a data inicio do contrato
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_INICIO_CONTRATO := substr(W_REGISTRO,1,W_VARIAVEL-1);
   W_REGISTRO := substr(W_REGISTRO,W_VARIAVEL+1);

   --Obtem do arquivo a data fim do contrato
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_FIM_CONTRATO := substr(W_REGISTRO,1,W_VARIAVEL-1);
   W_REGISTRO := substr(W_REGISTRO,W_VARIAVEL+1);

   --Obtem do arquivo o valor liberado
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_VALOR_LIBERADO := substr(W_REGISTRO,1,W_VARIAVEL-1);
   W_REGISTRO := substr(W_REGISTRO,W_VARIAVEL+1);

   --Obtem do arquivo o valor da operação
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_VALOR_OPERACAO := substr(W_REGISTRO,1,W_VARIAVEL-1);
   W_REGISTRO := substr(W_REGISTRO,W_VARIAVEL+1);

   --Obtem do arquivo o valor da parcela
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_VALOR_PARCELA := substr(W_REGISTRO,1,W_VARIAVEL-1);
   W_REGISTRO := substr(W_REGISTRO,W_VARIAVEL+1);

   --Obtem do arquivo o saldo devedor do funcionário
   W_VARIAVEL   := instr(W_REGISTRO,';');
   W_SALDO_DEVEDOR := substr(W_REGISTRO,1,W_VARIAVEL-1);

    OPEN COD_FUNC;
    FETCH COD_FUNC INTO W_CODIGO;
    IF COD_FUNC%FOUND THEN
      INSERT INTO EMPRESTIMO_CONSIGNADO
VALUES(W_CODIGO,W_NOME,W_PARCELA,W_INICIO_CONTRATO,W_FIM_CONTRATO,W_VALOR_LIBERADO,W_VALOR_OPERACAO,W_VALOR_PARCELA,W_SALDO_DEVEDOR,current_timestamp,W_LINHA);
    END IF;
   CLOSE COD_FUNC;

   COMMIT;
   W_LINHA:= W_LINHA+1;
  END LOOP;


Igor Alves
Analista do Sistema RH - MB Solutions
Pós-Graduando em Banco de Dados com Ênfase em Alta Disponibilidade - UNIFACS
Tel: (71)8812-8670



Mais detalhes sobre a lista de discussão lista