stevenandler Ответов: 0

Поведение Bizzarre с запросом oracle


Вот мой запрос
the 
-- Standard_Presets         ------------------------------------------------------------------------------------ START
     Standard_Presets As (
       Select
                1                                          HANDLE
                , :Date_Range_Option                       Date_Range    -- SQL Dev    
                , Epic_Util.Efn_Din(:Start_Date)           START_Date    -- SQL Dev
                , Epic_Util.Efn_Din(:End_Date) + .99999    End_Date      -- SQL Dev
       From Dual
                   )
                   
-- Date_Selection           ------------------------------------------------------------------------------------ START
      , Date_Selection as (
       Select   1                               HANDLE
              ,(Case PRE.date_range
                   When 'Yesterday'              Then            Trunc(Sysdate      )     -  1
                   When 'Last 7 Days'            Then            Trunc(Sysdate      )     -  7
                   When 'Last Full Week'         Then            Trunc(Sysdate, 'D' )     -  7
                   When 'Last Full Week - 1'     Then            Trunc(Sysdate, 'D' )     - 14         -- STARTing on Sunday
                   When 'Last Full MidWeek'      Then            Trunc(Sysdate, 'D' )     -  4         -- STARTing on Wednesday
                   When 'Last Full MidWeek - 1'  Then            Trunc(Sysdate, 'D' )     - 11         -- STARTing on Wednesday
                   When 'Month To Date'          Then            Trunc(Sysdate, 'MM')
                   When 'Last Full Month'        Then add_months(Trunc(Sysdate, 'MM'),-1)
                   When 'Last Full Month - 1'    Then add_months(Trunc(Sysdate, 'MM'),-2)
                   When 'Previous 30 Days'       Then            Trunc(Sysdate      )     - 30
                   When 'Year to Date (Days)'    Then            Trunc(Sysdate, 'Y' )
                   When 'Year To Date (Months)'  Then            Trunc(Sysdate, 'Y' )
                   Else PRE.START_date                                        -- Custom Date Range
               End)                              Dt_From
              ,(Case PRE.date_range
                   When 'Yesterday'              Then            Trunc(Sysdate)           -   .00001
                   When 'Last 7 Days'            Then            Trunc(Sysdate)           -   .00001
                   When 'Last Full Week'         Then            Trunc(Sysdate, 'D' )     -   .00001
                   When 'Last Full Week - 1'     Then            Trunc(Sysdate, 'D' )     -  7.00001
                   When 'Last Full MidWeek'      Then            Trunc(Sysdate, 'D' )     +  2.99999   -- ending on Tuesday
                   When 'Last Full MidWeek - 1'  Then            Trunc(Sysdate, 'D' )     -  4.00001   -- ending on Tuesday
                   When 'Month To Date'          Then            Trunc(Sysdate)           -   .00001
                   When 'Last Full Month'        Then            trunc(sysdate, 'MM')     -   .00001
                   When 'Last Full Month - 1'    Then add_months(Trunc(Sysdate, 'MM'),-1) -   .00001
                   When 'Previous 30 Days'       Then            Trunc(Sysdate)           -   .00001
                   When 'Year To Date (Days)'    Then            Trunc(Sysdate)           -   .00001
                   When 'Year To Date (Months)'  Then            trunc(sysdate, 'MM')     -   .00001
                   Else PRE.end_date                                          -- Custom Date Range
               End)                              Dt_Thru 
       From Standard_Presets PRE 
                          )
-- Date_Selection           ------------------------------------------------------------------------------------ end

-- Standard_Base_Population ------------------------------------------------------------------------------------ start
  , Standard_Base_Population as (
       Select /* + MATERIALIZE */ 
                ENC.pat_id                                         Pat_Id                
              ,  ENC.pat_enc_csn_id                                 Pat_Enc_Csn_Id        
               , IID.identity_id                                    Identity_Id           
               , ENC.contact_date                                   Contact_Date
              , ENC.appt_status_c                                  Appt_Status_C  
              , ENC.enc_type_c                                     Enc_Type_C     
               , ENC.hsp_account_id                                 Hsp_Account_Id 
               , ENC.account_id                                     Guarantor_Id
               , ENC.visit_prov_id                                  Visit_Prov_Id  
                                                                                         ------ Report Parameters ------ Crystal Needs                
               , DEP.rpt_grp_trtyseven_c                            rpt_grp_trtyseven_c  -- Ownership             -- Formula(s): DIR1,DIR2,DIR3,DIR4,DIR5  
               , CSA.serv_area_id                                   serv_area_id         -- ServiceArea                                                    
               , DEP.rpt_grp_trtyfour_c                             rpt_grp_trtyfour_c   -- Market                                                         
               , LOC.loc_id                                         loc_id               -- Location                                                       
               , ENC.effective_dept_id                              Department_ID        -- Department            -- Formula(s): DIR1,DIR2,DIR3,DIR4,DIR5  -- use txn dept for display
               , Nvl(Csa.Serv_Area_Name, 'Undefined Service Area')  Serv_Area_Name                                -- Group Header #1                       
               , Nvl(Loc.Loc_Name,       'Undefined Location')      Loc_Name                                      -- Group Header #2, Page Header b        
               , Nvl(Dep.Department_Name,'Undefined Department')    Department_Name                               -- Group Header #3                       -- use txn dept for display
               , DEP.rpt_grp_thirtysix_c                            rpt_grp_thirtysix_c                           -- Formula(s): DIR1,DIR2,DIR3,DIR4,DIR5 
               , DEP.rev_loc_id                                     rev_loc_id                                    -- Formula(s): DIR2                   
       From                            pat_enc ENC
                   join         date_selection DTS   on  DTS.handle                 =      1
                   Join            clarity_dep DEP   on  DEP.department_id          =  ENC.effective_dept_id    
                   Join            clarity_loc LOC   on  LOC.loc_id                 =  DEP.rev_loc_id       
              Left Join             clarity_sa CSA   on  CSA.serv_area_id           =  LOC.serv_area_id     
                   Join            identity_id IID   on  IID.identity_type_id       =  LOC.id_type          
                        and                              IID.pat_id                 =  ENC.pat_id   
                   JOIN        HSP_TRANSACTIONS HSP ON   HSP.HSP_ACCOUNT_ID         =  ENC.HSP_ACCOUNT_ID
       Where     1=1
            and (     ENC.appt_status_c is null   -- for hospital visits and home care visits    
            or  ENC.appt_status_c in (   2  -- completed                            
                                       , 6  -- arrived                              
                )   )       
                
            AND      ENC.CONTACT_DATE   >=   DTS.Dt_From
            and      ENC.CONTACT_DATE    <=   DTS.Dt_Thru  
            And ( ('0' = :Ownership     ) or (Dep.Rpt_Grp_Trtyseven_C in (:Ownership    ) ) )     -- SQL Dev    1
            And ( ( 0  = :ServiceArea   ) or (Csa.Serv_Area_Id        in (:ServiceArea  ) ) )     -- SQL Dev    10
            And ( ('0' = :Market        ) or (Dep.Rpt_Grp_Trtyfour_C  in (:Market       ) ) )     -- SQL Dev    500
            And ( ( 0  = :Location      ) or (Loc.Loc_Id              in (:Location     ) ) )     -- SQL Dev    1100
            And ( ( 0  = :Department    ) or (Dep.Department_Id       in (:Department   ) ) )     -- SQL Dev    0
            And ( ('0' = :EncounterType ) or (ENC.enc_type_c          in (:EncounterType) ) )     -- SQL Dev    3 = hospital
          )                                                                                                                   

select 
      SBP.Pat_Enc_Csn_Id  
  ,  SBP.*
from  Standard_Base_Population SBP  


Что я уже пробовал:

Пока у меня есть оператор , SBP.* запрос работает нормально ,но если я закомментирую его, SBP.* запрос, похоже, будет выполняться вечно. Любая идея.

Я использую SQL Developer evr 17.4, а версия Oracle DB-12.C Rel 12.1.0.2.0

Gerry Schmitz

Все равно выглядит уродливо.

ZurdoDev

Итак, если вы выберете только 1 поле, оно будет работать вечно, но если вы выберете это одно поле и все поля в таблице, оно будет работать нормально? Это чушь собачья.

Я бы предложил упростить ваш запрос, чтобы сузить круг возможных проблем. Начните с того, что вырежьте вещи и посмотрите, что произойдет. Вы должны быть в состоянии найти, какая конкретная часть вызывает его.

Sinisa Hajnal

Поместите все эти огромные случаи в функции и протестируйте их изолированно

0 Ответов