在 SQL 开发人员的 Where 子句中使用 Case 语句

Using Case statement in Where clause in SQL developer

我正在尝试在“where 子句”中编写一个“case”语句,该子句在“then”部分有一个“in”语句。基本上,下面的代码是我想要的,但它不是 Oracle 的正确语法。有人知道正确的语法应该是什么样的吗?

       create or replace  PROCEDURE "Test"
       (
        Type in number
       )
       as
       begin
       select Id, Name, AccCode from myTable
       where case Type  
                 when 0 then AccCode in (130,131)
                 when 1 then AccCode in (230,231);
       end;

我认为您不需要 case 声明。你可能只想

where (accCode in (130,131) and type = 1)
   or (accCode in (230,231) and type = 0)

如果你真的想使用 case 语句,你可以说

where (case when accCode in (130,131) then 1 
            when accCode in (230,231) then 0
            else null
         end) = type

但这将不那么可读,优化器也不容易找到一个好的执行计划。