нвл с запросом внутри - PullRequest
       1

нвл с запросом внутри

0 голосов
/ 02 сентября 2011

Можно сделать что-то вроде этого:

and zmt.mediatypeid in nvl(:P21_MEDIA, select mediatypeid from zbx.media_type)

: P21_MEDIA является переменной

Ответы [ 2 ]

2 голосов
/ 02 сентября 2011

Да, это называется скалярное выражение подзапроса :

select x, (select y from another_table where foo = x) from the_table

select x from the_table where foo = (select y from another_table where bar = x)

Может возвращать только один столбец и одну строку, все остальное является ошибкой.

Я не могу проверить это прямо сейчас, но я бы предположил, что вы также можете использовать его внутри такой функции, как NVL. В документации упоминается только то, что ее нельзя использовать в GROUP BY.

1 голос
/ 02 сентября 2011

да, вы можете использовать оператор CASE для проверки условия:

and 1 = CASE
         WHEN :P21_MEDIA IS NOT NULL THEN
            CASE 
               WHEN zmt.mediatypeid = :P21_MEDIA THEN 1
               ELSE 0
            END
         WHEN zmt.mediatypeid IN (select mediatypeid from zbx.media_type)  THEN 1
         ELSE 0
        END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...