oralce的判断语句

大家对 IF ELSE 语句应该都很熟悉吧,它是用来对过程进行控制的。在 SQL 的世界中 CASE 语句有类似的效果。下面简单的介绍 CASE 语句的用法。

CASE 语句的形式

事实上,CASE 语句有两种形式

 1 SELECT  
 2     -- 简单 CASE 语句(Simple CASE)  
 3     CASE GENDER    
 4         WHEN 1 THEN ''    
 5         ELSE ''    
 6     END AS GENDER,  
 7   
 8     -- 查询 CASE 语句(Searched CASE)  
 9     CASE     
10         WHEN GENDER = 1 THEN ''    
11         ELSE ''    
12     END AS GENDER  
13       
14 FROM USER_INFO;  

 

注意点: 

1、以CASE开头,以END结尾 
2、分支中WHEN 后跟条件,THEN为显示结果 
3、ELSE 为除此之外的默认情况,类似于高级语言程序中switch case的default,可以不加 
4、END 后跟别名 

 

考虑下面的情况,假设有个 USER_INFO 表,定义如下:

1 CREATE TABLE USER_INFO  
2 (  
3     NAME        VARCHAR2(20) NOT NULL,  ---姓名  
4     GENDER      NUMBER(1,0),            ---性别(1、男   2、女)  
5     BIRTHDAY    DATE                    ---生日  
6 );  
7   
8 INSERT INTO USER_INFO VALUES ('张三', 1, DATE '2014-12-27');  
9 INSERT INTO USER_INFO VALUES ('李四', 2, DATE '2014-12-27'); 

CASE使用案例 1

把 USER_INFO 表导出生成一个文件,要求性别为男或女,而不是1和2,怎么办?我们可以用如下的语句处理:

1 SELECT   
2     NAME,  
3     CASE GENDER  
4         WHEN 1 THEN ''  
5         ELSE ''  
6     END AS GENDER,  
7     BIRTHDAY  
8 FROM USER_INFO;

CASE使用案例 2

假设 USER_INFO 目前没有值,然后你往 USER_INFO 导入了一批数据,但是很不幸,错把男设置成为2,而把女设置成为1,现在要求你变换过来,怎么办?

 

方法1:使用三条语句,先把2更新成3,接着把1更新成2,最后把3更新成1,是不是很麻烦?

1 UPDATE USER_INFO SET GENDER=3 WHERE GENDER=2;  
2 UPDATE USER_INFO SET GENDER=1 WHERE GENDER=3;  
3 UPDATE USER_INFO SET GENDER=2 WHERE GENDER=1; 

方法2:使用CASE语句

1 UPDATE USER_INFO SET GENDER=  
2 (  
3   CASE GENDER  
4     WHEN 1 THEN 2  
5     WHEN 2 THEN 1  
6     ELSE GENDER  
7   END  
8 );

DECODE 函数

此外, Oracle 还提供了一个函数来达到和 CASE 语句相同的效果。

1 SELECT DECODE(GENDER, 1, '', 2, '', '未知') FROM USER_INFO;  
1 DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

表示如果value等于if1时,DECODE函数的结果返回then1,...,如果不等于任何一个if值,则返回else。 

 

If/Else功能实现的3种写法

 1 一、单个IF
 2 1 3 
 4 if a=...  then
 5 .........
 6 end if;
 7 
 8 2 9 
10 if a=... then
11 ......
12 else
13 ....
14 end if;
15 
16 二、多个IF
17 
18 if a=..  then
19 ......
20 elsif a=..  then
21 ....
22 end if;     
23 这里中间是“ELSIF”,而不是ELSE IF 。这里需要特别注意

 

 

 

 

posted @ 2017-04-18 18:03  浅雨凉  阅读(635)  评论(0编辑  收藏  举报