2011-09-02 56 views
-1

它可能做這樣的事情:NVL與查詢中

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

:P21_MEDIA是一個變量

+0

是的,我都試過了。我的問題是如果有可能做一個nvl函數內的查詢,就像我放在那裏的例子。 – macwadu

回答

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 
+0

我要去試試:) – macwadu

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中使用。

+0

我要試試:) – macwadu

+0

雖然我不認爲你可以像這樣組合NVL和IN。它只是返回一個單一的值。 – Thilo

+0

是的你的權利它不能返回多個值,@schurik選項有一些變化正在工作。坦克你的幫助 – macwadu