ORA-01843: недопустимое исключение месяца при запуске в качестве отчета на Maximo - PullRequest
2 голосов
/ 19 сентября 2019

В настоящее время я пишу некоторый Кодекс, чтобы получить представление о выпущенных сервисных билетах от моей компании и о том, куда они были направлены.Я использую Birt для Eclipse, чтобы создать отчет, который использует этот код.При использовании Toad 12.0.10.30 не возникает никаких исключений, как и для Birt.При загрузке отчета в Maximo (IBM) и выполнении там отчета, я получаю ошибочный отчет с файлом журнала, в котором говорится, что

[ERROR] [MXQServer1] [] DataSet [Data_Set_Name] fetch failed: 
java.sql.SQLDataException: ORA-01843: not a valid month

Я пытался исправить значения REGEX моих значений даты и проверить, все лидолжен работать и, по сути, является датой.

Это части моего Кодекса, в которых используются Даты:

and trunc(creationdate) between to_date('01.01.2019', 'dd.MM.RRRR') and TRUNC(sysdate-1) 

Эта часть Кодекса (код написан с помощью блоков «с») выдает список месяцев до вчерашнего дня,Мне нужна эта часть для группировки позже.

SELECT     TO_CHAR ( ADD_MONTHS ( start_dt, LEVEL - 1), 'DD/MM/YYYY') AS monate 
FROM     (
SELECT  TRUNC ( TO_DATE ( '01/01/2019', 'DD/MM/YYYY')) AS start_dt, 
TRUNC ( sysdate-1) AS end_dt FROM dual
) 
CONNECT BY     LEVEL <= 1 + MONTHS_BETWEEN ( end_dt , start_dt)

Вот как в отчете, выпущенном через Maximo, создается системная дата:

2019-09-19 07:47:59.0

Может быть, при запуске отчетамесяц разбирается неправильно?Потому что системная дата построена иначе, чем моя формация (ГГГГ-ММ-ДД - ДД / ММ / ГГГГ).Как бы я мог это исправить?

Редактировать: При запуске этого кода "на Maximo"

SELECT VALUE FROM NLS_SESSION_PARAMETERS WHERE PARAMETER = 'NLS_DATE_FORMAT'

, как предложено пользователем @ MT0, я получаю

DD-MON-RR

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

1 Ответ

3 голосов
/ 19 сентября 2019

Я бы сказал, просто удалите TO_CHAR().Если вы генерируете DATE, вы должны сохранить его как DATE значение.

SELECT ADD_MONTHS(DATE '2019-01-01', LEVEL - 1) AS monate 
FROM dual 
CONNECT BY LEVEL <= 1 + MONTHS_BETWEEN(TRUNC(SYSDATE-1), DATE '2019-01-01');

или

WITH dt AS 
    (SELECT DATE '2019-01-01' AS start_dt FROM dual)
SELECT ADD_MONTHS(start_dt, LEVEL - 1) AS monate 
FROM dt 
CONNECT BY LEVEL <= 1 + MONTHS_BETWEEN(TRUNC(SYSDATE-1), start_dt);
...