带有OR的Oracle CASE

时间:2009-07-08 18:38:04

标签: oracle plsql

我们可以在中使用CASE语句,OR如下:

CASE WHEN A > 0 OR B >0 THEN c=1 END;

我知道我们可以使用AND,但在使用OR时出现错误。你能建议一下吗?感谢。

2 个答案:

答案 0 :(得分:8)

你试过把你的OR语句放在parens中吗?

 CASE WHEN (A > 0 OR B >0) THEN c=1 END;

答案 1 :(得分:6)

您发布了一个CASE表达式,但将其命名为CASE语句。这可能是混乱的来源。 CASE表达式有效:

SQL> declare
  2    bool boolean;
  3    a    int := 1;
  4    b    int := 0;
  5    c    int := 1;
  6  begin
  7    bool := CASE WHEN A > 0 OR B >0 THEN c=1 END;
  8    if bool is null
  9    then
 10      dbms_output.put_line('NULL');
 11    elsif bool
 12    then
 13      dbms_output.put_line('TRUE');
 14    else
 15      dbms_output.put_line('FALSE');
 16    end if;
 17  end;
 18  /
TRUE

PL/SQL procedure successfully completed.

但你可能想要使用CASE语句,该语句以“END CASE”而不是“END”结尾。一个例子:

SQL> declare
  2    a    int := 1;
  3    b    int := 0;
  4    c    int;
  5  begin
  6    case
  7    when a > 0 or b > 0 then
  8      c := 1;
  9    end case
 10    ;
 11    dbms_output.put_line(c);
 12  end;
 13  /
1

PL/SQL procedure successfully completed.

此致 罗布。