2016-03-03 35 views
0

我需要查詢一個存儲過程和結果的基礎上設定程序上需要做出的決定在條件語句DB2調用存儲過程在條件語句

比如我有一個存儲過程「Main_SP」

現在如果「Main_SP」的結果爲'null',那麼結果應該是'Tweety',但是如果th結果集不爲空,那麼結果集應該被檢索,

怎麼辦?

我試過下面的一些但沒有工作。

SELECT 
    case Main_SP('MyVariable') 
    when 'null' 
     then 'Tweety' end  
    FROM SYSIBM.SYSDUMMY1 WITH UR 

SELECT 
    case Main_SP('MyVariable') 
    when null 
     then 'Tweety' end  
    FROM SYSIBM.SYSDUMMY1 WITH UR 

它是失敗的條件,在第一個命令時,即使它是'空'它不打印'Tweety'。

雖然使用第二個,但在上下文中出現'Null'無效的錯誤。

+0

...好吧,你有哪些,'null'或'NULL'?第一個是一個字符串(包含小寫字'null'),第二個是沒有任何價值。你可以比較'WHEN'中的字符串(或等號),但是必須通過'IS NULL'/'IS NOT NULL'來比較空值。 –

+0

Main_SP是存儲過程還是UDF? –

+0

@IanBjorhovde在db2中存儲過程。 –

回答

0

我不相信你可以用這種方式使用存儲過程。

存儲過程可以通過兩種方式

  1. 結果集
  2. 在輸出或輸入/輸出PARM

您沒有使用選項2和我不返回數據認爲結果集永遠是NULL。可能沒有記錄,但RS本身不是NULL。另外,從手冊中我可以看到,處理來自DB2中另一個存儲過程的存儲過程的RS需要您聲明分配結果集定位器。但我從來沒有這樣做過。

如果你的過程返回一個單值或null,你最好通過將它定義爲一個帶有返回值的函數來實現。那麼你的代碼將是簡單的:

SELECT 
    COALESCE(Main_Fnc('MyVariable'),'Tweety') 
FROM 
    SYSIBM.SYSDUMMY1 WITH UR 
+0

我只是作爲一個例子使用'null',我的意思是要求這個比較不會根據這些結果返回想要的結果,我需要在該條件語句中使用select查詢.... BTW Store Procedure實際返回String如果沒有數據值,則爲'null'。 –

0

你不能調用存儲過程作爲SQL全選的一部分;你需要讓調用存儲過程的客戶端處理這個邏輯。如果您必須在服務器上執行此操作,請實施一個新的存儲過程,該存儲過程本身會調用Main_SP幷包含用於解釋結果的邏輯。