На днях разрабатывал один отчет.
На тестовой инфраструктуре (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 для меня остается загадкой. Либо какие-то параметры окружения отличаются, либо это отличия, которые дает различие платформ.