我可以在 where 子句中使用 case 来与列值进行比较吗

Can I use case inside where clause to compare with a column value

假设 limit_exceeded 是一个类似布尔值的列,如果超过限制 10,则为 1,否则为 0。我正在传递一个数字以根据是否超出限制来获取相应的 risk_code。

我试过了,但出现错误:

DECLARE
  temp   VARCHAR2(10);
  my_num NUMBER;
BEGIN
  my_num := 80;
  SELECT risk_code
    INTO temp
    FROM risk_table
   WHERE limit_exceeded = (CASE WHEN my_num > 10 THEN 1 ELSE 0) ;
  DBMS_OUTPUT.PUT_LINE(temp);
END;

有没有更好的方法?

您可以将 SIGN() 函数与 DECODE() 一起用作另一个选项,例如

SELECT risk_code
  INTO temp
  FROM risk_table
 WHERE limit_exceeded = DECODE(SIGN(my_num - 10),1,0);

一种替代方法是将 case 表达式解压缩为标准 and/or 条件:

declare
    temp   varchar2(10);
    my_num number := 80;
begin
    select risk_code into temp
    from   risk_table
    where  limit_exceeded = 0
    or     (my_num > 10 and limit_exceeded = 1);

    dbms_output.put_line(temp);
end;