如何在 where 子句中返回不同的语句?(神谕)

Ale*_*das 0 oracle

我的意思是:

CREATE OR REPLACE FUNCTION FUNCTION1(ID IN NUMBER) RETURN NUMBER
BEGIN
SELECT COLUMN1, COLUMN2, COLUMN3 FROM TABLE1
WHERE COLUMN1<= Y AND (CASE WHEN ID < X THEN COLUMN1<COLUMN2 ELSE COLUMN2>COLUMN3 END),
AND COLUMN 3 = XYZ;

RETURN SOMETHING.

END;
Run Code Online (Sandbox Code Playgroud)

我知道case 语句不返回表达式而是返回一个值。我如何使用某种“条件语句”或其他东西来返回表达式?我过去常常使用“IF 条件”在 mysql 中轻松完成,但我不知道如何在 Oracle 11g 中完成。
编辑:它的工作原理是否相同,不仅适用于 where 陈述者而且适用于 select ?

JNK*_*JNK 5

只需使用分组WHERE条件:

WHERE COLUMN1<= Y 
   AND ((ID < X AND COLUMN1<COLUMN2)
        OR(ID >= X AND COLUMN2>COLUMN3))
AND COLUMN 3 = XYZ;
Run Code Online (Sandbox Code Playgroud)

请记住,您真的只想在此处获得一些布尔评估 - 只要您可以将您的要求减少到不同的条件集,您就可以将其放入WHERE其中,这将非常快。

使用的时间CASE是如果您有需要短路的重叠标准。