SSRS - Oracle DB, параметр Passing Date - PullRequest
2 голосов
/ 14 июня 2010

Использование SSRS с базой данных Oracle.Мне нужно предложить пользователю при запуске отчета ввести дату для отчета.Каков наилучший способ добавить параметр в моем отчете SSRS.Возникли проблемы с поиском правильного формата даты.в меню «Параметры отчета» я настроил параметры отчета, используя тип данных DateTime.

Продолжайте получать эту ошибку «ORA-01843: Недействительный месяц»

Спасибо за помощь.

Select
    a.OPR_Name,
    a.OPR,
    a.Trans_Desc,
    a.Trans_Start_Date,
    Cast(a.S_Date as date) as S_Date,
    Sum(a.Duration) as T
From (
    Select
          US_F.OPR_Name,
          ITH_F.OPR,
          ITH_F.ITH_RID,
          ITH_F.TRANSACT,
          Transact.DESC_1 as Trans_Desc,
          To_CHAR(ITH_F.Start_Time,'DD-Mon-YY') as Trans_Start_Date,
          To_CHAR(ITH_F.Start_Time,'MM/DD/YYYY') as S_Date,
          Substr(To_CHAR(ITH_F.Start_Time,'HH24:MI'),1,6) as Start_Time,
          To_CHAR(ITH_F.End_Time,'DD-Mon-YY') as Trans_End_Date,
          Substr(To_CHAR(ITH_F.End_Time,'HH24:MI'),1,6) as End_Time,
          Cast(Case When To_CHAR(ITH_F.Start_Time,'DD-Mon-YY') = To_CHAR(ITH_F.End_Time,'DD-Mon-YY')
               Then (((To_CHAR(ITH_F.End_Time,'SSSSS') - To_CHAR(ITH_F.Start_Time,'SSSSS')) / 60))/60 
               Else ((86399 - (To_CHAR(ITH_F.Start_Time,'SSSSS')) + To_CHAR(ITH_F.End_Time,'SSSSS'))/60)/60
               End as Decimal(3,1)) as Duration        
    from Elite_76_W1.ITH_F 
         Left Join Elite_76_W1.Transact
               on Transact.Transact = ITH_F.Transact
         Left Join Elite_76_W1.US_F
               on US_F.OPR = ITH_F.OPR
    Where ITH_F.TRANSACT not in ('ASN','QC','LGOT')
 ) a
Where a.S_Date =  @Event_Date
Having  Sum(a.Duration) <> 0
Group By a.OPR_Name,
         a.OPR,
         a.Trans_Desc,
         a.Trans_Start_Date,
         a.S_Date
 Order by a.OPR_Name

Ответы [ 2 ]

6 голосов
/ 14 июня 2010

Параметры Oracle указываются с начальным двоеточием - @Event_Date должно быть: Event_Date.

3 голосов
/ 14 июня 2010

Вы используете CAST(a.S_Date AS DATE) в своем запросе, где a.S_Date - это VARCHAR: To_CHAR(ITH_F.Start_Time, 'MM/DD/YYYY'). Если ваш параметр даты сеанса NLS_DATE_FORMAT отличается от 'MM/DD/YYYY', это приведет к ошибке форматирования (в вашем случае я подозреваю, что ваш NLS_DATE_FORMAT имеет значение типа DD-MON-YYYY, что приводит к ошибке "month").

Несколько вариантов:

  • не используйте TO_CHAR во внутреннем запросе (всегда пытайтесь сохранить формат даты для внутренних вычислений, используйте TO_CHAR только там, где он принадлежит - в графическом интерфейсе). Если вам нужна только часть даты, используйте TRUNC .
  • используйте TO_DATE вместо CAST во внешнем запросе: to_date(a.S_Date, 'MM/DD/YYYY'), это очевидно утомительно: вы приводите дату к varchar, которая позже преобразуется в дату.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...