如何在 PL SQL 中检查解码函数内的 2 个表达式

How to check 2 expressions inside a decode function in PL SQL

是否可以在 PL SQL 中检查 "Decode" 函数内的多个表达式。 我的要求基本上是

SELECT value1,
DECODE(Expression1 AND Expression2,
       search1 , search2,
        ,'pass result',
        'fail result') value2
FROM dual;

或者是否有解决方法?

最简单的答案是不要使用解码,而是使用 case 语句,例如

select 1 value1,
       case when 'a' = 'a' and 'b' = 'b' then 'pass'
            else 'fail'
       end result
from   dual;

    VALUE1 RESULT
---------- ------
         1 pass

可以使用 DECODE,但您必须使用嵌套的 DECODE,并且您最终会得到一些更难阅读、理解和维护的东西。如果您需要添加第三个条件会怎样?或者可能有多组结果会导致通过?你最终会得到一些真正可怕的东西去尝试和理解!

但是,如果您确实需要,这里有一个示例(以及相应的 CASE 表达式解决方案,(恕我直言)更容易阅读):

with sample_data AS (SELECT 1 ID, 'a' col1, 'b' col2 FROM dual UNION ALL
                     SELECT 2 ID, 'a' col1, 'c' col2 FROM dual UNION ALL
                     SELECT 3 ID, 'd' col1, 'b' col2 FROM dual UNION ALL
                     SELECT 4 ID, 'e' col1, 'f' col2 FROM dual)
SELECT ID,
       CASE WHEN col1 = 'a' AND col2 = 'b' THEN 'pass'
            ELSE 'fail'
       END case_result,
       DECODE(col1, 'a', DECODE(col2, 'b', 'pass',
                                      'fail'),
                    'fail') decode_result
FROM   sample_data;

        ID CASE_RESULT DECODE_RESULT
---------- ----------- -------------
         1 pass        pass
         2 fail        fail
         3 fail        fail
         4 fail        fail