我可以在 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;
假设 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;