可以做这样的事情:
and zmt.mediatypeid in nvl(:P21_MEDIA, select mediatypeid from zbx.media_type)
:P21_MEDIA是一个变量
答案 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