Repetir a mesma Query durante um período de data

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
Luis.Vicentim
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Ter, 08 Fev 2022 8:00 am
Localização: Brasil

Tenho uma query no qual consigo somente estar executando com uma data corrente (variável = :V_DT_INICIAL), preciso executar essa query em um certo período entre datas.

Segue a query:

Selecionar tudo

        SELECT  LEITO.CD_UNID_INT   CD_UNID_INT
          ,UNID_INT.DS_UNID_INT     DS_UNID_INT
          ,LEITO.DS_RESUMO          DS_RESUMO
          ,LEITO.DS_ENFERMARIA      DS_ENFERMARIA
          ,NVL( DECODE( SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1,  'V',  DBAMV.RETORNA_SITUACAO_DO_LEITO(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS'),LEITO.CD_LEITO)), 'V')  TP_OCUPACAO
          ,DECODE( SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1, NULL, PACIENTE.NM_PACIENTE)              NM_PACIENTE
          ,DECODE( SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1, NULL, TO_CHAR(PACIENTE.DT_NASCIMENTO, 'DD/MM/YYYY'))            DT_NASCIMENTO
          ,DECODE( SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1, NULL, CONVENIO.NM_CONVENIO)              NM_CONVENIO
          ,DECODE( SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1, NULL, PRESTADOR.NM_PRESTADOR)            NM_PRESTADOR
          ,DECODE( SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1, TO_DATE(NULL), ATENDIME.DT_ATENDIMENTO)  DT_ATENDIMENTO
          ,DECODE( SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1, NULL, ATENDIME.CD_ATENDIMENTO)           CD_ATENDIMENTO
          ,LEITO.CD_LEITO           CD_LEITO
          ,CONVENIO.CD_CONVENIO     CD_CONVENIO
          ,DECODE(NVL(DECODE(SIGN(TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS') - NVL(TRUNC(MOV_INT.DT_LIB_MOV) + (MOV_INT.HR_LIB_MOV - TRUNC(MOV_INT.HR_LIB_MOV)),SYSDATE)), 1,  'V', MOV_INT.TP_MOV), 'V'),'V','',SUB_PLANO.DS_SUB_PLANO) DS_SUB_PLANO
          ,decode(NVL(LEITO.SN_EXTRA,'N'),'N', 1,0) Leito_n_extra
          ,NVL(LEITO.SN_EXTRA,'N')  SN_EXTRA
          ,:V_DT_INICIAL

        FROM  DBAMV.LEITO
             ,DBAMV.UNID_INT
             ,(SELECT MAX(CD_MOV_INT) CD_MOV_INT
                     ,CD_LEITO
                 FROM DBAMV.MOV_INT
                WHERE TO_DATE(TO_CHAR(MOV_INT.DT_MOV_INT,'DD/MM/YYYY') || ' ' ||
                      TO_CHAR(MOV_INT.HR_MOV_INT,'HH24:MI'), 'DD/MM/YYYY HH24:MI') <= TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS')
               GROUP BY CD_LEITO)   ULT_MOV
              ,DBAMV.MOV_INT
              ,DBAMV.ATENDIME
              ,DBAMV.PACIENTE
              ,DBAMV.CONVENIO
              ,DBAMV.PRESTADOR
              ,DBAMV.SUB_PLANO
              ,DBAMV.SETOR
WHERE    LEITO.CD_UNID_INT = UNID_INT.CD_UNID_INT
AND      LEITO.CD_LEITO = ULT_MOV.CD_LEITO(+)
AND      ULT_MOV.CD_MOV_INT = MOV_INT.CD_MOV_INT(+)
AND      MOV_INT.CD_ATENDIMENTO = ATENDIME.CD_ATENDIMENTO(+)
AND      UNID_INT.CD_SETOR = SETOR.CD_SETOR
AND      ATENDIME.CD_PACIENTE = PACIENTE.CD_PACIENTE(+)
AND      ATENDIME.CD_CONVENIO = CONVENIO.CD_CONVENIO (+)
AND      ATENDIME.CD_PRESTADOR  = PRESTADOR.CD_PRESTADOR(+)
AND      (TRUNC(LEITO.DT_DESATIVACAO) IS NULL OR TRUNC(LEITO.DT_DESATIVACAO) > TRUNC( TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS')) )
AND      TRUNC(LEITO.DT_ATIVACAO) <= TRUNC( TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS'))
AND      ATENDIME.CD_SUB_PLANO = SUB_PLANO.CD_SUB_PLANO(+)
AND      ATENDIME.CD_CONVENIO = SUB_PLANO.CD_CONVENIO(+)
AND      ATENDIME.CD_CON_PLA  =  SUB_PLANO.CD_CON_PLA(+)
AND      ATENDIME.CD_MULTI_EMPRESA(+) = 1

AND      (MOV_INT.DT_LIB_MOV IS NULL OR
         TO_DATE(TO_CHAR(MOV_INT.DT_LIB_MOV,'DD/MM/YYYY') || ' ' ||
         TO_CHAR(MOV_INT.HR_LIB_MOV,'HH24:MI'), 'DD/MM/YYYY HH24:MI') <>  TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS')
     OR (TO_DATE(TO_CHAR(MOV_INT.DT_LIB_MOV,'DD/MM/YYYY') || ' ' ||
         TO_CHAR(MOV_INT.HR_LIB_MOV,'HH24:MI'), 'DD/MM/YYYY HH24:MI') =    TO_DATE(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS')
     AND ATENDIME.DT_ALTA IS NULL
     OR To_Date(TO_CHAR(ATENDIME.DT_ALTA,'DD/MM/YYYY') || ' ' ||
         TO_CHAR(ATENDIME.HR_ALTA,'HH24:MI'), 'DD/MM/YYYY HH24:MI') = to_date(:V_DT_INICIAL,'DD/MM/YYYY HH24:MI:SS')))
AND LEITO.SN_EXTRA = 'N'
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Parece que a V_DT_INICIAL é comparada com duas datas na sua query:
* mov_int.HR_LIB_MOV
* atendime.DT_ALTA

Você vai ter que colocar ambas na cláusula SELECT.
Depois vai ter que alterar a cláusula WHERE pra que ela funcione baseado num PERIODO, e não numa data única.
Algo assim:

Selecionar tudo

HR_LIB_MOV >= :V_DATA_INI and HR_LIB_MOV < :V_DATA_FIM
Responder
  • Informação