Oracle WHERE子句中的大小写

Jus*_*uel 6 oracle

遵循oracle查询符合并正常工作:

SELECT
    Employee.EmployeeId,
    Employee.EmployeeName,
    Employee.Description,
    Employee.IsFrozen 
FROM
    employee, employeerole, roledef
WHERE
    employee.employeeid = employeerole.employeeid 
    AND employeerole.roleid = roledef.roleid
    AND rolename IN (
                    CASE
                        WHEN (1 < 2)  THEN ('Owner Role')
                        WHEN (2 < 1)  THEN ('Eval Owner Role')
                    END);
Run Code Online (Sandbox Code Playgroud)

现在在我的情况下,我想在第二个时候加上ie(2 <1)两个rolename('Owner Role'和'Eval Owner Role').请建议以上查询如何更改.

提前致谢.

--Justin Samuel

Jus*_*ave 13

为什么用CASE?为什么不简单

AND (   ( (1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role') )
     OR ( (2 < 1) and rolename IN ('Eval Owner Role') ) )
Run Code Online (Sandbox Code Playgroud)

我假设您实际上没有硬编码的谓词评估为TRUE(1 <2)或FALSE(2 <1)并且这些谓词实际上是实际代码中的绑定变量.

如果你真的想使用一个CASE语句,你可以编码

AND( CASE WHEN (1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role')
          THEN 1
          WHEN (2 < 1) and rolename IN ('Eval Owner Role') 
          THEN 1
          ELSE 0
       END) = 1
Run Code Online (Sandbox Code Playgroud)

但是对于优化器来说,这将更难以处理,而对于必须维护它的开发人员来说则更不清楚.