This is experimental functionality, and as such subject to change. Use at your own risk!
CASE with DISTINCT FROM to DECODE
Applies to ✅ Open Source Edition ✅ Express Edition ✅ Professional Edition ✅ Enterprise Edition
When a searched CASE expression contains DISTINCT predicates, which always share the same operand, the expression might be replaced by the shorter DECODE function
Using Settings.transformPatternsCaseDistinctToDecode
, the following transformations can be achieved:
-- With Settings.transformPatternsCaseDistinctToDecode active, this: SELECT CASE WHEN a IS NOT DISTINCT FROM b THEN 1 END, CASE WHEN a IS NOT DISTINCT FROM b THEN 1 ELSE 2 END, CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 END, CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 ELSE 3 END FROM tab; -- ... is transformed into the equivalent expression: SELECT DECODE(a, b, 1), -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 END, DECODE(a, b, 1, 2), -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 ELSE 2 END, DECODE(a, b, 1, c, 2), -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 END, DECODE(a, b, 1, c, 2, 3) -- CASE WHEN a IS NOT DISTINCT FROM b THEN 1 WHEN a IS NOT DISTINCT FROM c THEN 2 ELSE 3 END, FROM tab;
Feedback
Do you have any feedback about this page? We'd love to hear it!