nvl里面有查询

时间:2011-09-02 10:09:58

标签: sql oracle

可以做这样的事情:

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

:P21_MEDIA是一个变量

2 个答案:

答案 0 :(得分:2)

是的,它被称为scalar subquery expression

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 :(得分:1)

是的,您可以使用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