среда, 26 сентября 2012 г.

Oracle BI 11g. nQSError: 59021


На днях разрабатывал один отчет.
На тестовой инфраструктуре (MS Win x86) все работало отлично.
А вот после переноса на Production (Oracle Linux x64) при выполнении одного отчета стали появляться ошибки

[nQSError: 59021] CASE conditional expressions have mismatching data types. [[
[nQSError: 43119] Query Failed:

Долго не мог понять проблему... Тем более, что нигде CASE не использовал. И в конце концов выявил источник...))
Оказалось, что проблема кроется в использовании LOOKUP в логической модели.
Краткая инструкция и польза от использования  lookup tables описана в блоге RittmanMead  http://www.rittmanmead.com/2010/08/oracle-bi-ee-11g-lookup-tables-sparse-and-dense-lookups/

Так вот... Оказалось, что ошибка возникает в случае, если я возвращаю поле с типом DATETIME, а в качестве DefaultValue в Sparse lookups возвращаю null.

Выглядела функция примерно так:

LOOKUP
(
SPARSE
"Модель".."Реестр"."Дата отправки",
null,
"Модель".."Запрос"."ProcessUnid"
)

Я совсем забыл, что по умолчанию значение NULL имеет тип varchar и его надо преобразовывать.
После того, как я изменил функцию и добавил явное преобразование, все заработало

LOOKUP
(
SPARSE
"Модель".."Реестр"."Дата отправки",
to_datetime(null, 'dd.mm.yyyy'),
"Модель".."Запрос"."ProcessUnid"
)

Почему функция выполнялась на тестовой инфраструктуре и перестала выполняться на production для меня остается загадкой. Либо какие-то параметры окружения отличаются, либо это отличия, которые дает различие платформ.





Комментариев нет: