Navegação

    Fórum Técnico Insoft4

    • Login
    • Pesquisar

    Geração de arquivo CSV de pessoas e empresas - MWM International

    Customizações
    1
    1
    17
    Carregando Mais Posts
    • Mais Antigo para Mais Recente
    • Mais Recente para Mais Antigo
    • Mais Votados
    Responder
    • Responder como tópico
    Entre para responder
    Este tópico foi deletado. Apenas usuários com privilégios de moderação de tópico podem vê-lo.
    • jonathan
      jonathan Desenvolvimento última edição por

      A partir da versão 2.0.9.1 está sendo disponibilizada uma nova funcionalidade para geração de um arquivo CSV com a lista de pessoas por empresa e contratante a partir do banco de dados utilizando a UTL_FILE do Oracle.

      A funcionalidade foi criada a partir de solicitação de um cliente (MWM International).

      O arquivo é gerado através a procedure de banco PROC_GERA_ARQUIV_TERCEIROS_MWM que tem apenas um parâmetro de entrada varchar2 onde deve ser informado o caracter que será usado como separador de colunas no arquivo CSV.

      Pré-requisitos

      Deve existir um DIRECTORY chamado HORACIUS criado no banco de dados e o usuário deve ter permissões de leitura e escrita nesse diretório, assim como permissões de leitura e escrita na pasta do Sistema Operacional vinculada a este directory.
      No banco DESENV01 este directory aponta para "/tmp" e o usuário dsv_gtsoft tem as permissões necessárias para execução.
      O usuário também precisa ter grant de execute para a package UTL_FILE.

      Observação: para dar os grants é necessário estar logado como sysdba.

      Exemplo de criação da estrutura necessária:

      CONNECT SYS/password AS SYSDBA
      
      GRANT EXECUTE ON UTL_FILE TO user;
      
      
      CREATE OR REPLACE DIRECTORY HORACIUS AS '/tmp';
      
      GRANT READ, WRITE ON DIRECTORY HORACIUS TO user;
      

      Estrutura do Arquivo

      O arquivo que é gerado tem o nome composto da seguinte forma:
      HORA_TERCEIROS_ + YYYYMMDD da data atual + .CSV

      Exemplo: HORA_TERCEIROS_20220429.CSV

      Ao executar o procedimento caso já exista um arquivo na pasta com o mesmo nome o mesmo será removido antes de gerar o novo arquivo.

      Cada registro do arquivo contém as seguintes informações:

      • CODIGO_PESSOA
      • CPF
      • NOME
      • FUNCAO
      • CODIGO_TIPO_PESSOA
      • DESCRICAO_TIPO_PESSOA
      • DATA_ADMISSAO
      • DATA_DESLIGAMENTO
      • CODIGO_EMPRESA
      • CNPJ_EMPRESA
      • CPF_EMPRESA
      • NOME_EMPRESA
      • CODIGO_CONTRATANTE
      • NOME_CONTRATANTE
      • SITUACAO

      Sempre serão incluídos no arquivos todas as pessoas de todas as empresas que tenham turnos ativos em alguma contratante, não existe filtro e nem ordenação na consulta base.

      Existe uma regra específica para a coluna situação, conforme segue:

      • Situação ATIVO: Quando data de desligamento não informada ou data de desligamento maior que a data atual mais 15 dias
      • Situação EXPIRANDO: Quando data de desligamento for entre a data atual mais um dia e a data atual mais 15 dias
      • Situação DESLIGADO: Quando data de desligamento menor ou igual a data atual

      Exemplo de chamada para execução

      exec PROC_GERA_ARQUIV_TERCEIROS_MWM(';');
      

      Observação: no cliente ela será executa a partir de um JOB de banco diariamente

      Exemplo de script para leitura do arquivo gerado

      Caso não tenha acesso a pasta onde o arquivo foi gerado no servidor do banco de dados para conferência, a mesma pode ser realizada lendo o conteúdo do arquivo via script pl/sql.
      Segue exemplo de script para leitura:

      DECLARE
      --
      string1 VARCHAR2(32767);
      file1   UTL_FILE.FILE_TYPE;
      --
      BEGIN
        --
        file1 := UTL_FILE.FOPEN('HORACIUS','HORA_TERCEIROS_20220427.CSV','R'); -- ajustar o nome do arquivo
        loop
          begin
            UTL_FILE.GET_LINE(file1, string1, 32767); 
            DBMS_OUTPUT.PUT_LINE(string1); 
          exception
            when no_data_found then
              exit;
          end;
        end loop;
        --
        UTL_FILE.FCLOSE_ALL; 
        --
      END;
      
      1 Resposta Última resposta Responder Citar 3
      • Primeiro post
        Último post
      Powered by NodeBB | Contributors