Oracle BI Publisher - различное поведение между 10G и 11G

Я нашел синтаксис для написания условного оператора SQL в наборах данных Oracle BI Publisher 10G. Например, я хочу, чтобы данные были либо подробными, либо различающимися в зависимости от определенного мной параметра.

Чтобы проиллюстрировать то, что я хочу:

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

Данные уникальны, значение = 1

Данные не уникальны, значение = 2

Затем, в зависимости от выбора пользователя, выполняемая команда SQL в наборе данных во время выполнения будет либо:

SELECT 

        DISTINCT 

        FIRSTNAME || ' ' || LASTNAME AS EMP_NAME, 
        DECODE(TRANSACTIONTYPE, 19, 'SUCCESS', 'FAILURE') AS ACCESS_ATTEMPT, 
        READERDESCRIPTION AS DOOR,

        etc…

Or

   SELECT 

        FIRSTNAME || ' ' || LASTNAME AS EMP_NAME, 
        DECODE(TRANSACTIONTYPE, 19, 'SUCCESS', 'FAILURE') AS ACCESS_ATTEMPT, 
        READERDESCRIPTION AS DOOR,

        etc…

(обратите внимание на ключевое слово Distinct в предыдущем фрагменте кода)

Конечно, это невозможно в SQL, но я наткнулся на эту удивительную функцию в BI 10G, чтобы добиться этого, см. Код ниже:

SELECT 
    
    {$ if ${P_UNIQUE}='1' $}
    DISTINCT 
    {$endif$}
    /*no need for else, the distinct keyword will simply not be presented if the p_unique parameter value is not equal to 1*/
    
    FIRSTNAME || ' ' || LASTNAME AS EMP_NAME, 
    DECODE(TRANSACTIONTYPE, 19, 'SUCCESS', 'FAILURE') AS ACCESS_ATTEMPT, 
    READERDESCRIPTION AS DOOR,

        etc…

Это отлично работает в 10G

Теперь проблема, с которой я столкнулся, заключается в том, что мы перешли на 11G, все отчеты из 10G теперь работают нормально и, как ожидалось в 11G, но вы не можете написать этот код из царапина, он не распознается во время разработки в 11G, и вы не сможете сохранить свой запрос, если он содержит ошибку, хотя он работает в перенесенных отчетах.

Кроме того, я не могу редактировать и сохранять свои правки в этих перенесенных отчетах по той же причине.

Итак, как преодолеть это ограничение времени разработки и сохранить запрос независимо от того, что в нем написано?

Как я уже говорил, он работает в 11G, но я не могу редактировать существующие или создавать новые с помощью этих специальных команд.

Так что любые предложения будут оценены.


person sameh.q    schedule 30.01.2014    source источник


Ответы (2)


Попробуйте концепцию гибких полей, она недавно появилась в BI 11g

Ссылка на справку Oracle

person user3259864    schedule 01.02.2014
comment
поля flex не так динамичны, как операторы if - person sameh.q; 01.02.2014
comment
@simsim, тем не менее, вы можете использовать их в выделенной части, где часть - person user3259864; 01.02.2014
comment
Правильно, но проблема в том, что у меня есть более 60 отчетов с использованием оператора $ if, и будет время, когда мне нужно будет отредактировать один из этих отчетов, поэтому мне нужно посмотреть, есть ли способ сделать этот код работать, а не искать другую концепцию - person sameh.q; 01.02.2014
comment
Это действительно должен быть комментарий. - person eddie_cat; 19.08.2014

Эта проблема теперь исправлена ​​в последнем патче Oracle 11g.

11g Release 1 (11.1.1)

Это было в предыдущей версии.

Был добавлен раскрывающийся список, позволяющий разработчику выбрать тип запроса Type of SQL, лучше всего подходит для запросов этого типа Non-Standard SQL

Просто протестировал, все работает нормально

person sameh.q    schedule 20.08.2014