Почему to_date необходимо для извлечения данных из Oracle в Crystal Reports

Если я запускаю следующий выбор в PL/SQL из моей базы данных Oracle, я получаю ожидаемые результаты:

select * from risk t where t.accounting_to_date='01-JAN-3000'

Когда я выполняю ту же инструкцию выбора в Crystal Reports 2016, используя команду и соединение Oracle, я не могу получить какие-либо данные.

Обходные пути, которые я нашел:

  1. Используйте функцию to_date в моей команде Crystal Report следующим образом:

    select * from risk t where t.accounting_to_date= to_date('01-JAN-3000','dd-MON-yyyy')

ИЛИ ЖЕ

  1. Используйте соединение ODBC.

Оба эти обходных пути действительно работают. Тем не менее, мой вопрос заключается в следующем: что вызывает эту проблему? Есть ли где-то настройка, которую я могу изменить? Проблема на стороне Oracle или на стороне Crystal Reports? Это ошибка?

Я просто пытаюсь понять, почему это происходит. Я должен использовать Oracle Connection вместо ODBC, так что обходной путь для меня невозможен. Использование to_date вокруг даты everysingle либо в Oracle, либо в Crystal является обременительным. Мне уже приходилось добавлять эту функцию к десяткам дат, а есть еще сотни.

Я наткнулся на это, когда мы изменили способ подключения Crystal Reports с использованием соединения ODBC к соединению Oracle. Я нашел много пропущенных данных, и это было исправлено с помощью функции to_date.

Заранее спасибо.

2 ответа

Приведение varchar2 к дате по умолчанию работает только для '01-JAN-2017', потому что для oracle nls_date_format задан этот формат по умолчанию. Формат по умолчанию может быть изменен для каждой сессии, что, скорее всего, делает Crystal Reports каждый раз, когда устанавливает соединение.

если вы запустите это, вы увидите, что было по умолчанию:

SELECT value
FROM   nls_session_parameters
WHERE  parameter = 'NLS_DATE_FORMAT'

Если вы как-то добавите этот запрос в свой отчет, вы, вероятно, сможете увидеть формат, который устанавливает Crystal Reports.

Вы, вероятно, никогда не должны полагаться на формат по умолчанию, чтобы всегда работать. Администратор базы данных может изменить этот формат, если он выберет, и весь код, на который он опирается, сломается.

У нас была та же проблема при использовании драйвера Oracle ODBC в Crystal, и она была исправлена, когда мы перешли на "Драйвер ODBC CR Wire Wire Protocol". Поскольку вам нужно использовать соединение оракула, я не уверен, что вы будете делать, хотя. Вот что мы нашли в SAP:

Информация от SAP

Другие вопросы по тегам