[英]Oracle CASE statement?
我有一個存儲過程。 我在哪里傳遞一個布爾值,例如IS_ELIGIBLE。 現在我希望能夠編寫如下的查詢:
SELECT col1,
CASE
WHEN IS_ELIGIBLE THEN col2 * 100
ELSE
col2 * 50
END
INTO OUT_COL1, OUT_SCORE
FROM TABLE_NAME
問題是因為IS_ELIGIBLE不是TABLE_NAME中的列之一,查詢錯誤輸出。 我可以使用if..else ie編寫相同的查詢。
IF IS_ELIGIBLE
SELECT col1, col2 * 100
ELSE
SELECT col1, col2 * 50
END
但我會重復兩次選擇聲明。 我知道我可以創建具有select語句的函數,這樣我就不必重復兩次了。 但我只是好奇是否可以在不執行if..else或創建新功能的情況下完成? 謝謝。
問題不在於IS_ELIGIBLE不是表中的列,而是它是一個布爾值而SQL無法處理布爾值(我知道,不要問)。 所以你需要引入另一個這樣的變量:
IS_ELIGIBLE_NUM NUMBER := CASE WHEN IS_ELIGIBLE THEN 1 ELSE 0 END;
..
SELECT col1,
CASE
WHEN IS_ELIGIBLE_NUM = 1 THEN col2 * 100
ELSE
col2 * 50
END
INTO OUT_COL1, OUT_SCORE
FROM TABLE_NAME
Boolean不是SQL引擎的有效類型。
您必須使用受支持類型的臨時變量。
但是,如果這確實是您的SProc的參數,那么對於任何給定的調用它都是一個常數。
所以,為什么不這樣做:
someVarForCol2 TABLE_NAME.col2%type;
begin
SELECT col1, col2
INTO OUT_COL1, someVarForCol2
FROM TABLE_NAME;
OUT_SCORE := CASE WHEN IS_ELIGIBLE THEN someVarForCol2 * 100 ELSE someVarForCol2 * 50 END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.