Oracle Decode()函数和CASE语句都是我们经常用到的,那么它们的区别在哪里呢?下面就为您详细介绍Oracle Decode()函数和CASE语句的区别,供您参考。
首先,举2个简单的例子,简单对比一下这2者的区别。
1.CASE语句:
以下是代码片段:
SELECT CASE SIGN ( 5 - 5 ) WHEN 1 THEN ' Is Positive ' WHEN - 1 THEN ' Is Negative ' ELSE ' Is Zero ' END FROM DUAL;
后台实现:
以下是代码片段:
if ( SIGN ( 5 – 5 ) = 1 ) { ' Is Positive ' ; } else if ( SIGN ( 5 – 5 ) = 2 ) { ' Is Negative ' ; } else { ‘ Is Zero’ }
2. Decode函数:
以下是代码片段:
SELECT DECODE( SIGN ( 5 – 5 ), 1 , ' Is Positive ' , - 1 , ' Is Negative ' , ‘ Is Zero’) FROMDUAL
后台实现:
以下是代码片段:
switch ( SIGN ( 5 – 5 ) ) { case 1 : ' Is Positive ' ; break ; case 2 : ' Is Negative ' ; break ; default : ‘ Is Zero’ }
在上面的例子中,2者似乎都可以实现。但是,在碰到非凡的问题时Decode()要实现起来就相当复杂了。
例如:
以下是代码片段:
SELECT CASE X - FIELD WHEN X - FIELD < 40 THEN ‘X - FIELD < 40 ’ WHEN X - FIELD < 50 THEN ‘X - FIELD < 50 ’ WHEN X - FIELD < 60 THEN ‘X - FIELD < 60 ’ ELSE ‘UNBEKNOWN’ END FROM DUAL
因此,个人认为,CASE语句在处理类似问题就显得非常灵活。当只是需要匹配少量数值时,用Decode更为简洁。