When I pass date filter for the same day, query comes back empty and there is data

Asked

Viewed 185 times

0

In my table/base there is data for the day 05/08/2015, happens that when I pass a date filter for the same day, it doesn’t work, it returns empty. If I pass like this: 04/08/2015 and 05/08/2015 doesn’t work either. It only works like this: 04/08/2015 and 06/08/2015, remembering that there is only data on the day 05/08/2015.

I am suspicious that it is the matter of the hour. This runs on a packege and there’s a procedure inside that does this. The parameters come through an xml. I’m getting it because I don’t know package well and etc..

Below my package:

CREATE OR REPLACE PACKAGE BODY HES_REL_MATMED
is

  function p_versao   return varchar2
  is
  begin
     return 'CVS>> SPEC: 1.4 - BODY: 1.18 - Sac 32405 - Novo tipo de proposta - Solicitação de Proposta.';
  end;
  --
  --
  -- Inicilização dos atributos do record de parametros
  -- Também pode ser colocado operações iniciais aqui dentro.
  --
  procedure inicializar( p_tbl_paramSet   in out nocopy top_utl_param.tbl_paramSet
                       , p_rec_controles  in out nocopy top_utl_rel.rec_controles
                       , p_xml_param      in            clob
                       )
  is
  begin
     --
     p_rec_controles.logs            := null;
     p_rec_controles.parametros      := p_xml_param;
     --
     p_rec_controles.validacao_ok    := true;
     p_rec_controles.exe_cursor      := false;
     p_rec_controles.chkpoint        := 0;
     p_rec_controles.linhas_lidas    := 0;
     p_rec_controles.linhas_emitidas := 0;
     p_rec_controles.sql_cursor      := null;

     ts_log_execucao ('cmc_rel_DEM_PROP_ANALITICO.inicializar'
                        , NULL
                        , sqlerrm
                        , p_rec_controles.sql_cursor
                        , 'INICIO'
                         ) ;
     top_utl_param.add_param( p_tbl_paramSet    => p_tbl_paramSet
                            , p_nom_grp_param   => 'parametros'
                            , p_nom_coluna      => 'pDataInicial'
                            , p_tpo_oracle      => 'VARCHAR2'
                            , p_ind_obrigatorio => 'N'
                            , p_nom_label       => 'Data Inicial'
                            , p_tam_maximo      => 10
                            , p_ind_origem_vlr  => 'N'
                            ) ;

     top_utl_param.add_param( p_tbl_paramSet    => p_tbl_paramSet
                            , p_nom_grp_param   => 'parametros'
                            , p_nom_coluna      => 'pDataFinal'
                            , p_tpo_oracle      => 'VARCHAR2'
                            , p_ind_obrigatorio => 'N'
                            , p_nom_label       => 'Data Final'
                            , p_tam_maximo      => 10
                            , p_ind_origem_vlr  => 'N'
                            ) ;

     top_utl_param.add_param( p_tbl_paramSet    => p_tbl_paramSet
                            , p_nom_grp_param   => 'parametros'
                            , p_nom_coluna      => 'pTipoTabela'
                            , p_tpo_oracle      => 'VARCHAR2'
                            , p_ind_obrigatorio => 'N'
                            , p_nom_label       => 'Tipo Tabela'
                            , p_tam_maximo      => 1
                            , p_ind_origem_vlr  => 'N'
                            ) ;

     top_utl_param.add_param( p_tbl_paramSet    => p_tbl_paramSet
                            , p_nom_grp_param   => 'parametros'
                            , p_nom_coluna      => 'pTabelaSelecao'
                            , p_tpo_oracle      => 'VARCHAR2'
                            , p_ind_obrigatorio => 'N'
                            , p_nom_label       => 'Seleção multipla de tabelas'
                            , p_ind_origem_vlr  => 'N'
                            ) ;

    top_utl_param.add_param( p_tbl_paramSet    => p_tbl_paramSet
                            , p_nom_grp_param   => 'parametros'
                            , p_nom_coluna      => 'pClassificacaoSelecao'
                            , p_tpo_oracle      => 'VARCHAR2'
                            , p_ind_obrigatorio => 'N'
                            , p_nom_label       => 'Seleção multipla de classificoes'
                            , p_ind_origem_vlr  => 'N'
                            ) ;

    top_utl_param.add_param( p_tbl_paramSet    => p_tbl_paramSet
                            , p_nom_grp_param   => 'parametros'
                            , p_nom_coluna      => 'pGrupoSelecao'
                            , p_tpo_oracle      => 'VARCHAR2'
                            , p_ind_obrigatorio => 'N'
                            , p_nom_label       => 'Seleção multipla de grupos'
                            , p_ind_origem_vlr  => 'N'
                            ) ;

    top_utl_param.add_param( p_tbl_paramSet    => p_tbl_paramSet
                            , p_nom_grp_param   => 'parametros'
                            , p_nom_coluna      => 'pAutorizacaoPrevia'
                            , p_tpo_oracle      => 'VARCHAR2'
                            , p_ind_obrigatorio => 'N'
                            , p_nom_label       => 'Autorização prévia'
                            , p_ind_origem_vlr  => 'N'
                            ) ;

  end;
  --
  -- get_configurações:
  --
  -- Obtém informações gerais pertinentes à execução deste relatório
  -- em ts.fila_relatorio, caso tenha a necessidade de outras informações
  -- em top_utl_rel.rec_config_relatorio, falar com os arquitetos.
  --
  procedure get_configuracoes ( p_rec_controles  in out nocopy top_utl_rel.rec_controles
                              , p_reg_config     in out nocopy top_utl_rel.rec_config_relatorio
                              , p_num_seq_fila   in            number
                              )
  is
  begin
     --
     p_reg_config := ts.top_utl_rel.get_configuracoes( p_num_seq_fila => p_num_seq_fila );
     --
     top_utl_rel.abrir_xml_configuracao ( p_xml_log => p_rec_controles.logs );
     top_utl_rel.obter_xml_configuracoes( p_xml_log => p_rec_controles.logs , p_reg_config => p_reg_config );
     --
     if  p_num_seq_fila is null then
         --
         top_utl_rel.abrir_xml_mensagens  ( p_xml_log => p_rec_controles.logs );
         top_utl_rel.gerar_xml_mensagem   ( p_xml_log => p_rec_controles.logs , p_leitor => top_utl_padrao.tpo_leitor_usuario , p_tipo => top_utl_padrao.tpo_mensagem_erro , p_texto => 'O provedor dos dados nao recebeu o identificador do servico de relatorio solicitado.' );
         top_utl_rel.gerar_xml_mensagem   ( p_xml_log => p_rec_controles.logs , p_leitor => top_utl_padrao.tpo_leitor_sistema , p_tipo => top_utl_padrao.tpo_mensagem_erro , p_texto => 'JasperReport: TsCmc1005JRA.jasper nao esta enviando o parametro p_num_seq_fila para TableFunction: HES_REL_MATMED.get_dados.' );
         top_utl_rel.fechar_xml_mensagens ( p_xml_log => p_rec_controles.logs );
         --
     end if;
     --
     top_utl_rel.fechar_xml_configuracao( p_xml_log => p_rec_controles.logs );
     --
  end;
  --
  -- tratar_parametros:
  -- -------------------
  -- O resultado indicará se o processo poderá gerar as linhas p_continuar = true.
  -- Para isto se um teste falhar este parametro deverá ser colocado como false.
  -- Se não tiver parametros ou validações a fazer, deixe apenas a primeira linha.
  --
  procedure tratar_parametros   ( p_rec_controles  in out nocopy top_utl_rel.rec_controles
                                , p_tbl_paramSet   in out nocopy top_utl_param.tbl_paramSet
                                )
  is                                               -- Explique as variaveis

  begin
     --
     top_utl_param.transformar_xml ( p_cod_retorno  => p_rec_controles.ind_retorno
                                   , p_msg_retorno  => p_rec_controles.msg_retorno
                                   , p_xml          => p_rec_controles.parametros
                                   , p_tbl_paramSet => p_tbl_paramSet
                                   ) ;
     --
     if  p_rec_controles.ind_retorno  = top_utl_padrao.tpo_mensagem_informativa then p_rec_controles.validacao_ok := true;
                                                                                else p_rec_controles.validacao_ok := false;
     end if;
     --
     top_utl_param.gerar_logs      ( p_xml_log       => p_rec_controles.logs
                                   , p_tab_paramsets => p_tbl_paramSet
                                   ) ;
     --
  end;
  --
  -- definir_cursor:
  --
  -- Montagem do String para execução dinâmica do cursor
  --
  -- O que não pode ser feito de forma alguma é concatenação de parametros,
  -- não importa o tamanho que este método poderá ter.
  --
  procedure definir_cursor      ( p_rec_controles  in out nocopy top_utl_rel.rec_controles
                                , p_info_relatorio in out nocopy top_utl_rel.rec_config_relatorio
                                , p_tbl_paramSet   in out nocopy top_utl_param.tbl_paramSet
                                )
  is
  begin
     --
     -- Atribuir a variável abaixo a query compactada, pois atualmente no 10g temos um limite de 32KB
     --
     p_rec_controles.sql_cursor := '';


    p_rec_controles.sql_cursor := p_rec_controles.sql_cursor
                               || trim ('SELECT ITEM.DT_INCLUSAO DATAINCLUSAO')
                               || trim (', DECODE(MAT.IND_TIPO_MAT_MED,''1'', ''BRASINDICE'',''2'', ''SIMPRO'',''9'',''TABELAPROPRIA'') TIPOTABELA')
                               || trim (', MAT.NOM_TABELA TABELA')
                               || trim (', VAL.COD_ITEM_MAT_MED_ORIG CODIGO')
                               || trim (', ITEM.COD_TUSS TUSS')
                               || trim (', CASE WHEN VAL.NOME_MAT_MED IS NOT NULL THEN TRIM(VAL.NOME_MAT_MED) ELSE TRIM(ITEM.NOM_COMERCIAL) END DESCRICAO')
                               || trim (', FAB.NOM_FABRICANTE FABRICANTE')
                               || trim (', ITEM.COD_REF_FABRICANTE REFERENCIAFABRICANTE')
                               || trim (', ITEM.REGISTRO_ANVISA REGISTROANVISA')
                               || trim (', DECODE(ITEM.IND_CLASS,''BD'', ''Bem Durável'',''MC'', ''Material de Consumo'',''ME'',''Material Especial'',''OT'',''Ortese'',''PT'',''Protese'',''ST'',''Síntese'',''IT'',''Instrumental'',''Sem classificação'') CLASSIFICACAOSIMPRO')
                               || trim (', ITEM.COD_GRUPO_MAT_MED AS GRUPOMATMED')
                               || trim (', ITEM.COD_GRUPO_ESTATISTICO AS GRUPOESTATISTICO')
                               || trim (', ITEM.IND_AUTORIZACAO AS AUTORIZACAOPREVIA')
                               || trim (', to_char(VAL.DT_VIGENCIA,''dd/mm/yyyy'') AS ULTIMAVIGENCIA')
                               || trim (', VAL.VAL_MAT_MED AS VALOR')
                               || trim (', PRS.NOME_PRESTADOR AS PRESTADORTABELAPROPRIA')
                 || rtrim (' FROM (SELECT COD_ITEM_MAT_MED, COD_ITEM_MAT_MED_ORIG, SIGLA_TABELA_MAT_MED, IND_TIPO_MAT_MED, MAX(DT_VIGENCIA) DT_VIGENCIA ')
                 || rtrim (' FROM VALOR_MAT_MED')
                 || rtrim (' WHERE DT_VIGENCIA >= to_date('''||p_tbl_paramSet('parametros').param('pDataInicial').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'')')
                 || rtrim (' AND DT_VIGENCIA <= to_date('''||p_tbl_paramSet('parametros').param('pDataFinal').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'')')
                 || rtrim (' GROUP BY COD_ITEM_MAT_MED, COD_ITEM_MAT_MED_ORIG, SIGLA_TABELA_MAT_MED, IND_TIPO_MAT_MED) VIGENCIA_VALOR')
                               || rtrim (' JOIN VALOR_MAT_MED VAL')
                 || rtrim (' ON VIGENCIA_VALOR.COD_ITEM_MAT_MED = VAL.COD_ITEM_MAT_MED')
                 || rtrim (' AND VIGENCIA_VALOR.COD_ITEM_MAT_MED_ORIG = VAL.COD_ITEM_MAT_MED_ORIG')
                 || rtrim (' AND VIGENCIA_VALOR.SIGLA_TABELA_MAT_MED = VAL.SIGLA_TABELA_MAT_MED')
                 || rtrim (' AND VIGENCIA_VALOR.IND_TIPO_MAT_MED = VAL.IND_TIPO_MAT_MED')
                 || rtrim (' AND VIGENCIA_VALOR.DT_VIGENCIA = VAL.DT_VIGENCIA')
                               || rtrim (' JOIN TABELA_MAT_MED MAT ON VAL.SIGLA_TABELA_MAT_MED = MAT.SIGLA_TABELA_MAT_MED')
                               || rtrim (' JOIN ITEM_MAT_MED ITEM  ON ITEM.COD_ITEM_MAT_MED = VAL.COD_ITEM_MAT_MED AND ITEM.IND_TIPO_MAT_MED = VAL.IND_TIPO_MAT_MED')
                               || rtrim (' LEFT JOIN PRESTADOR_SERVICO PRS ON PRS.COD_PRESTADOR_TS = MAT.COD_PRESTADOR_TS')
                               || rtrim (' LEFT JOIN GRUPO_ESTATISTICO GRP ON GRP.COD_GRUPO_ESTATISTICO = ITEM.COD_GRUPO_ESTATISTICO')
                               || rtrim (' LEFT JOIN FABRICANTE_MAT_MED FAB ON ITEM.COD_FABRICANTE = FAB.COD_FABRICANTE')
                               || rtrim (' WHERE ITEM.DT_INCLUSAO BETWEEN to_date('''||p_tbl_paramSet('parametros').param('pDataInicial').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'') ')
                               || rtrim (' AND to_date('''||p_tbl_paramSet('parametros').param('pDataFinal').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'')');


    if p_tbl_paramSet('parametros').param('pTipoTabela').ocorrencia(1).valor_string is not null then
       p_rec_controles.sql_cursor := p_rec_controles.sql_cursor || rtrim ('   AND MAT.IND_TIPO_MAT_MED = '||p_tbl_paramSet('parametros').param('pTipoTabela').ocorrencia(1).valor_string||' ');
    end if;

    if (p_tbl_paramSet('parametros').param('pTabelaSelecao').ocorrencia(1).valor_string is not null) then
       p_rec_controles.sql_cursor := p_rec_controles.sql_cursor || rtrim ('   AND MAT.SIGLA_TABELA_MAT_MED IN ('||p_tbl_paramSet('parametros').param('pTabelaSelecao').ocorrencia(1).valor_string||') ');
    end if;

    if (p_tbl_paramSet('parametros').param('pClassificacaoSelecao').ocorrencia(1).valor_string is not null) then
       p_rec_controles.sql_cursor := p_rec_controles.sql_cursor || rtrim ('   AND ITEM.COD_GRUPO_MAT_MED IN ('||p_tbl_paramSet('parametros').param('pClassificacaoSelecao').ocorrencia(1).valor_string||') ');
    end if;

    if (p_tbl_paramSet('parametros').param('pGrupoSelecao').ocorrencia(1).valor_string is not null) then
       p_rec_controles.sql_cursor := p_rec_controles.sql_cursor || rtrim ('   AND GRP.COD_GRUPO_ESTATISTICO IN ('||p_tbl_paramSet('parametros').param('pGrupoSelecao').ocorrencia(1).valor_string||') ');
    end if;

    if p_tbl_paramSet('parametros').param('pAutorizacaoPrevia').ocorrencia(1).valor_string is not null then
       p_rec_controles.sql_cursor := p_rec_controles.sql_cursor || rtrim ('   ITEM.IND_AUTORIZACAO = '||p_tbl_paramSet('parametros').param('pAutorizacaoPrevia').ocorrencia(1).valor_string||' ');
    end if;

    p_rec_controles.sql_cursor := p_rec_controles.sql_cursor ||rtrim (' ORDER BY ITEM.DT_INCLUSAO, MAT.IND_TIPO_MAT_MED, MAT.NOM_TABELA, VAL.COD_ITEM_MAT_MED_ORIG');

    p_rec_controles.exe_cursor := true;

     ts_log_execucao ('cmc_rel_DEM_PROP_ANALITICO.definir_cursor'
                        , NULL
                        , sqlerrm
                        , p_rec_controles.sql_cursor
                        , 'Query'
                         ) ; 
--dbms_output.enable(100000);
--dbms_output.put_line(p_rec_controles.sql_cursor);

  exception
  when others then
       --
       -- Caso um problema ocorra, atribuir false ao controle e agregar a mensagem do problema no XML
       -- O que pode ser feito especificamente para tipo de leitos ( leigo ou técnico ).
       --
       p_rec_controles.exe_cursor := false;
       p_rec_controles.sql_cursor := null;
       --
       top_utl_rel.gerar_xml_mensagem ( p_xml_log => p_rec_controles.logs
                                      , p_leitor  => top_utl_padrao.tpo_leitor_usuario
                                      , p_tipo    => top_utl_padrao.tpo_mensagem_erro
                                      , p_texto   => 'Cursor não definido, '||top_utl_padrao.MsgErro
                                      ) ;
  end;
  --
  -- abrir_cursor:
  -- ------------
  -- Realizar o OPEN para p_cursor
  -- Utilização da DBMS_SQL apenas no 11g quando será possivel converter em
  -- sys_refcursor.
  --
  -- O que não pode ser feito de forma alguma é concatenação de parametros,
  -- não importa o tamanho que este método poderá ter.
  --
  procedure abrir_cursor        ( p_rec_controles  in out nocopy top_utl_rel.rec_controles
                                , p_info_relatorio in out nocopy top_utl_rel.rec_config_relatorio
                                , p_tbl_paramSet   in out nocopy top_utl_param.tbl_paramSet
                                , p_cur_entidade   in out nocopy sys_refcursor
                                )
  is
  begin
      --
      -- Testes Obrigatório.
      --

      if  p_cur_entidade%isopen then close p_cur_entidade;
      end if;
      --
      -- Se deu problema em definir_cursor, nada deve ser processado.
      --

      if  p_rec_controles.sql_cursor is null or not p_rec_controles.exe_cursor  then return;
      end if;
      --
      -- Definindo como o cursor será executado, mediante variações de parametros e variáveis de configuração
      --

       dbms_output.put_line(p_rec_controles.sql_cursor);     

     open  p_cur_entidade
     for   p_rec_controles.sql_cursor;

      --
      top_utl_rel.gerar_xml_mensagem  ( p_xml_log => p_rec_controles.logs
                                      , p_leitor  => top_utl_padrao.tpo_leitor_usuario
                                      , p_tipo    => top_utl_padrao.tpo_mensagem_informativa
                                      , p_texto   => 'Cursor aberto, consulta executavel. Obtendo registros.'
                                      ) ;
      --
      p_rec_controles.exe_cursor := true;
      --
  exception
  when others then
       --
       -- Caso um problema ocorra, atribuir false ao controle e agregar a mensagem do problema no XML
       -- O que pode ser feito especificamente para tipo de leitos ( leigo ou técnico ).
       --
       p_rec_controles.exe_cursor := false;
       top_utl_rel.gerar_xml_mensagem ( p_xml_log => p_rec_controles.logs
                                      , p_leitor  => top_utl_padrao.tpo_leitor_usuario
                                      , p_tipo    => top_utl_padrao.tpo_mensagem_erro
                                      , p_texto   => 'Cursor não foi aberto, '||top_utl_padrao.MsgErro
                                      ) ;
       --
  end;
  --
  -- Table Function: Retorno dos dados
  --
  function get_dados( p_num_seq_fila   number
                    , p_xml_parametros clob   default null
                    )
  return   tbl_entidade
  pipelined
  is
     tab_entidade                      tbl_entidade;                       -- Coleção de retorno deve estar declarada neste escopo
     reg_config                        top_utl_rel.rec_config_relatorio;   -- Configurações obtidas no cadastro do tipo de relatório
     reg_ctrls                         top_utl_rel.rec_controles;          -- Variáveis de Controles do processo
     cur_entidade                      sys_refcursor;                      -- Cursor retornador dos dados.
     --
     tab_paramSet                      top_utl_param.tbl_paramSet;
     --
  begin
     --
     -- Inicializar as variaveis declaradas acima, método obrigatório por não ser Serially_reuseble.
     --
     inicializar( p_tbl_paramSet   => tab_paramSet
                , p_rec_controles  => reg_ctrls
                , p_xml_param      => p_xml_parametros
                ) ;
     --
     -- abrir log
     --
     top_utl_rel.abrir_xml_log( p_xml_log => reg_ctrls.logs ) ;
     --
     -- obter configurações do servico
     --
     reg_ctrls.chkpoint := 100; get_configuracoes ( p_rec_controles => reg_ctrls , p_reg_config => reg_config , p_num_seq_fila => p_num_seq_fila );
     --
     if  p_num_seq_fila is null then goto fechar_relatorio;
     end if;
     --
     -- Efetuar Tratamento dos parametros recebidos
     --
     if  p_xml_parametros is not null then
         --
         reg_ctrls.chkpoint := 500;
         tratar_parametros   ( p_rec_controles => reg_ctrls , p_tbl_paramSet => tab_paramSet );
         --
     end if;

     --
     reg_ctrls.chkpoint := 700;
     --
     if  reg_ctrls.validacao_ok then
         --
         top_utl_rel.abrir_xml_execucao( p_xml_log => reg_ctrls.logs );
         --
         -- Tratamento do Cursor a ser executado
         --
         definir_cursor  ( p_rec_controles => reg_ctrls , p_info_relatorio => reg_config , p_tbl_paramSet => tab_paramSet ) ;
         abrir_cursor    ( p_rec_controles => reg_ctrls , p_info_relatorio => reg_config , p_tbl_paramSet => tab_paramSet , p_cur_entidade => cur_entidade ) ;
         --
         if  reg_ctrls.exe_cursor then
             --
             reg_ctrls.chkpoint := 1000;
             --
             -- Leitura do Cursor
             --
             loop
                 fetch cur_entidade bulk collect into tab_entidade limit reg_config.ctr_arraysize;
                 exit  when tab_entidade.count = 0;
                 --
                 reg_ctrls.linhas_lidas := reg_ctrls.linhas_lidas + tab_entidade.count;
                 --
                 for i in 1..tab_entidade.count loop
                     --
                     pipe row(tab_entidade(i));
                     reg_ctrls.linhas_emitidas := reg_ctrls.linhas_emitidas + 1;
                     --
                     --
                 end loop;
             end loop;
             --
             close cur_entidade;
             --
             top_utl_rel.gerar_xml_mensagem ( p_xml_log => reg_ctrls.logs
                                            , p_leitor  => top_utl_padrao.tpo_leitor_usuario
                                            , p_tipo    => top_utl_padrao.tpo_mensagem_informativa
                                            , p_texto   => 'Cursor fechado, '||reg_ctrls.linhas_lidas   ||' linhas lidas.'
                                            ) ;
             top_utl_rel.gerar_xml_mensagem ( p_xml_log => reg_ctrls.logs
                                            , p_leitor  => top_utl_padrao.tpo_leitor_usuario
                                            , p_tipo    => top_utl_padrao.tpo_mensagem_informativa
                                            , p_texto   => 'Cursor fechado, '||reg_ctrls.linhas_emitidas||' linhas emitidas.'
                                            ) ;
             --
             reg_ctrls.chkpoint := 5000;
         end if;
         --
         top_utl_rel.fechar_xml_execucao( p_xml_log => reg_ctrls.logs );
         --
     end if;
     --
     <<fechar_relatorio>>
     --
     top_utl_rel.fechar_xml_log( p_xml_log => reg_ctrls.logs );
     --
     -- Caso queria, pode mudar a mensagem conclusiva de execução do log
     --
     if     reg_ctrls.chkpoint     < 5000  then
            --
            reg_ctrls.ind_retorno := top_utl_padrao.tpo_mensagem_erro ;
            reg_ctrls.msg_retorno := 'Erro durante a execução, verificar detalhes do log de ocorrência.' ;
            --
     elsif  reg_ctrls.linhas_lidas = ( reg_ctrls.linhas_emitidas + reg_ctrls.linhas_filtradas ) then
            --
            reg_ctrls.ind_retorno := top_utl_padrao.tpo_mensagem_informativa ;
            reg_ctrls.msg_retorno := 'Processado com sucesso.' ;
            --
     else
           reg_ctrls.ind_retorno := top_utl_padrao.tpo_mensagem_erro ;
           reg_ctrls.msg_retorno := 'Processo deve ter parado no meio da leitura, pois não processou todas as linhas lidas. Verificar logs ou investigar o caso.' ;
     end if;
     --
     if reg_ctrls.ind_retorno = top_utl_padrao.tpo_mensagem_erro then
         top_utl_rel.gravar_fila_relatorio_log( p_num_seq_fila => p_num_seq_fila
                                              , p_xml_log      => reg_ctrls.logs
                                              , p_ind_retorno  => reg_ctrls.ind_retorno
                                              , p_msg_retorno  => reg_ctrls.msg_retorno
                                              ) ;
     end if;
     --
     return;
     --
  exception
  when others then
       if  reg_ctrls.chkpoint < 5000 then
           --
           top_utl_rel.gerar_xml_mensagem ( p_xml_log => reg_ctrls.logs
                                          , p_leitor  => top_utl_padrao.tpo_leitor_usuario
                                          , p_tipo    => top_utl_padrao.tpo_mensagem_informativa
                                          , p_texto   => top_utl_padrao.MsgErro
                                          ) ;
           --
           if    reg_ctrls.chkpoint < 500 then top_utl_rel.fechar_xml_conversao( p_xml_log => reg_ctrls.logs );
           elsif reg_ctrls.chkpoint < 700 then top_utl_rel.fechar_xml_validacao( p_xml_log => reg_ctrls.logs );
                                          else top_utl_rel.fechar_xml_execucao ( p_xml_log => reg_ctrls.logs );
           end   if;
           --
       end if;
       --
       top_utl_rel.fechar_xml_log( p_xml_log => reg_ctrls.logs );
       --
       if  reg_ctrls.chkpoint < 5000 then
           --
           reg_ctrls.ind_retorno := '3' ;
           reg_ctrls.msg_retorno := 'Erro durante a execução, verificar detalhes do log de ocorrência.' ;
           --
           top_utl_rel.gravar_fila_relatorio_log( p_num_seq_fila => p_num_seq_fila
                                                , p_xml_log      => reg_ctrls.logs
                                                , p_ind_retorno  => reg_ctrls.ind_retorno
                                                , p_msg_retorno  => reg_ctrls.msg_retorno
                                                ) ;
       end if;
       --
       return;
  end;
  --
  function  p_template_versao  return varchar2
  is
  begin
     return 'CVS>> SPEC: 1.4 - BODY: 1.16 - SD_390660 - [PROJETO ADESÃO] Acompanhamento Proposta Massificado';
  end;
end;

Below the way I pass the parameters:

select *
  from table(HES_REL_MATMED.get_dados(1234512345,
                                      '<?xml version="1.0" encoding="UTF-8"?><parametros><pTipoTabela></pTipoTabela>
                                      <pDataInicial>03/08/2015</pDataInicial><pDataFinal>05/08/2015</pDataFinal>
                                      <pClassificacaoSelecao></pClassificacaoSelecao><pTabelaSelecao></pTabelaSelecao>
                                      <pGrupoSelecao></pGrupoSelecao><pAutorizacaoPrevia></pAutorizacaoPrevia>
                                      </parametros> '))

The filter is in: DataInicial and DataFinal

  • Most likely your query is mounting dataInicial > valor1 AND dataFinal < valor2, what you need is dataInicial >= valor1 AND dataFinal <= valor2

  • Try putting the date in the XML format 'yyyy-mm-dd'. Another attempt is to put the time in your query, getting "yyyy-mm-dd hh:mi", where the initial date is '2016-01-17 00:00:00' and the end date '2016-01-18' or '2016-01-17 23:59'.

1 answer

1


The date you are passing may be the time, so it does not bring the expected return. Using the function Trunc oracle, may solve your problem.

I did not test, but if you change the parts below:

Current:

|| rtrim (' WHERE DT_VIGENCIA >= to_date('''||p_tbl_paramSet('parametros').param('pDataInicial').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'')')
|| rtrim ('   AND DT_VIGENCIA <= to_date('''||p_tbl_paramSet('parametros').param('pDataFinal').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'')')

and

|| rtrim (' WHERE ITEM.DT_INCLUSAO BETWEEN to_date('''||p_tbl_paramSet('parametros').param('pDataInicial').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'') ')
|| rtrim ('   AND to_date('''||p_tbl_paramSet('parametros').param('pDataFinal').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'')');

Altering:

|| rtrim (' WHERE TRUNC(DT_VIGENCIA) >= TRUNC(to_date('''||p_tbl_paramSet('parametros').param('pDataInicial').ocorrencia(1).valor_string ||''',''dd/mm/yyyy''))')
|| rtrim ('   AND TRUNC(DT_VIGENCIA) <= TRUNC(to_date('''||p_tbl_paramSet('parametros').param('pDataFinal').ocorrencia(1).valor_string ||''',''dd/mm/yyyy''))')

and

|| rtrim (' WHERE TRUNC(ITEM.DT_INCLUSAO) BETWEEN TRUNC(to_date('''||p_tbl_paramSet('parametros').param('pDataInicial').ocorrencia(1).valor_string ||''',''dd/mm/yyyy'')) ')
|| rtrim ('   AND TRUNC(to_date('''||p_tbl_paramSet('parametros').param('pDataFinal').ocorrencia(1).valor_string ||''',''dd/mm/yyyy''))');
  • 1

    That’s the way it is, David. I’ve already done that and I’ve noticed another problem. In the subquery there is a Jay and that’s another problem, because they’re not hitting DT_VIGENCIA and DT_INCLUSAO. In case I make a RIGHT there it works. Then we have two problems. The lack of TRUNC and the same data problems. This solves. There is more TRUNC to be placed beyond those reported by you.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.