Oracle IF & CASE语句
2016-03-10 15:10
423 查看
IF语句主要有以下三种基本形式:
一、 IF-THEN语句
IF CONDITION THEN
STATEMENT 1;
...
STATEMENT N;
END IF;
二、 IF-THEN-ELSE语句
IF CONDITION THEN
STATEMENT 1;
ELSE
STATEMENT 2;
END IF;
三、 ELSLF语句
IF CONDITION 1 THEN
STATEMENT 1;
ELSIF CONDITION 2 THEN
STATEMENT 2;
ELSIF CONDITION 3 THEN
STATEMENT 3;
...
ELSE
STATEMENT N; -->>在ELSIF语句中,ELSE子句并不是必需的
END IF
下面,试举一例:用SYSDATE函数判断今天是否是周末,如果是周末的话,判断现在是上午还是下午。无论是否是周末,最后均显示日期。
注意:IF的嵌套用法和在ELSIF语句中,ELSE子句并不是必需的
CASE语句
CASE语句存在两种形式:CASE和搜索式CASE。
一、 CASE语句
CASE SELECTOR
WHEN EXPRESSION 1 THEN STATEMENT 1;
WHEN EXPRESSION 2 THEN STATEMENT 2;
...
WHEN EXPRESSION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;
下面,试举一例:用于判断输入数值的奇偶性。
二、 搜索式CASE语句
CASE
WHEN SEARCH CONDITION 1 THEN STATEMENT 1;
WHEN SEARCH CONDITION 2 THEN STATEMENT 2;
...
WHEN SEARCH CONDITION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;
以下用搜索式CASE语句重写上例 -->> 注意:没有声明v_num_flag变量,直接在WHEN中判断
CASE表达式
倘若是使用CA
4000
SE表达式,上述CASE语句和搜索式CASE语句可分别重写如下:
一、 对应CASE语句
二、 对应搜索式CASE语句
注意:CASE语句和CASE表达式之间的语法区别:在CASE语句中,WHEN和ELSE子句中的可执行语句以分号结尾。而在CASE表达式中,WHEN和ELSE子句所包含的表达式的结尾处不是分号。CASE语句以END CASE终止,CASE表达式以END结尾。
CASE表达式常用于SELECT INTO语句中,试举一例:
一、 IF-THEN语句
IF CONDITION THEN
STATEMENT 1;
...
STATEMENT N;
END IF;
二、 IF-THEN-ELSE语句
IF CONDITION THEN
STATEMENT 1;
ELSE
STATEMENT 2;
END IF;
三、 ELSLF语句
IF CONDITION 1 THEN
STATEMENT 1;
ELSIF CONDITION 2 THEN
STATEMENT 2;
ELSIF CONDITION 3 THEN
STATEMENT 3;
...
ELSE
STATEMENT N; -->>在ELSIF语句中,ELSE子句并不是必需的
END IF
下面,试举一例:用SYSDATE函数判断今天是否是周末,如果是周末的话,判断现在是上午还是下午。无论是否是周末,最后均显示日期。
注意:IF的嵌套用法和在ELSIF语句中,ELSE子句并不是必需的
DECLARE v_day varchar2(10); v_time number(2); BEGIN v_day := RTRIM(to_char(sysdate,'DAY')); v_time := to_char(sysdate,'hh24'); IF v_day in ('SATURDAY','SUNDAY') THEN -->>下面嵌套了一个ELSIF语句 IF v_time >= 6 AND v_time <12 THEN DBMS_OUTPUT.PUT_LINE('Good Moring'); ELSIF v_time >=12 AND v_time <=18 THEN DBMS_OUTPUT.PUT_LINE('Good Afternoon'); END IF; END IF; DBMS_OUTPUT.PUT_LINE('The time is: '||to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')); END;
CASE语句
CASE语句存在两种形式:CASE和搜索式CASE。
一、 CASE语句
CASE SELECTOR
WHEN EXPRESSION 1 THEN STATEMENT 1;
WHEN EXPRESSION 2 THEN STATEMENT 2;
...
WHEN EXPRESSION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;
下面,试举一例:用于判断输入数值的奇偶性。
DECLARE v_num NUMBER := &user_num; v_num_flag NUMBER; BEGIN v_num_flag := MOD(v_num,2); CASE v_num_flag WHEN 0 THEN DBMS_OUTPUT.PUT_LINE(v_num||' is even number'); ELSE DBMS_OUTPUT.PUT_LINE(v_num||' is odd number'); END CASE; END;
二、 搜索式CASE语句
CASE
WHEN SEARCH CONDITION 1 THEN STATEMENT 1;
WHEN SEARCH CONDITION 2 THEN STATEMENT 2;
...
WHEN SEARCH CONDITION N THEN STATEMENT N;
ELSE STATEMENT N+1;
END CASE;
以下用搜索式CASE语句重写上例 -->> 注意:没有声明v_num_flag变量,直接在WHEN中判断
DECLARE v_num NUMBER := &user_num; BEGIN CASE WHEN MOD(v_num,2)=0 THEN DBMS_OUTPUT.PUT_LINE(v_num||' is even number'); ELSE DBMS_OUTPUT.PUT_LINE(v_num||' is odd number'); END CASE; END;
CASE表达式
倘若是使用CA
4000
SE表达式,上述CASE语句和搜索式CASE语句可分别重写如下:
一、 对应CASE语句
DECLARE v_num NUMBER := &user_num; v_num_flag number; v_result varchar2(30); BEGIN v_num_flag := MOD(v_num,2); v_result := CASE v_num_flag WHEN 0 THEN v_num||' is even number' ELSE v_num ||' is odd number' END; DBMS_OUTPUT.PUT_LINE(v_result); END;
二、 对应搜索式CASE语句
DECLARE v_num NUMBER := &user_num; v_result varchar2(30); BEGIN v_result := CASE WHEN MOD(v_num,2) = 0 THEN v_num||' is even number' ELSE v_num ||' is odd number' END; DBMS_OUTPUT.PUT_LINE(v_result); END;
注意:CASE语句和CASE表达式之间的语法区别:在CASE语句中,WHEN和ELSE子句中的可执行语句以分号结尾。而在CASE表达式中,WHEN和ELSE子句所包含的表达式的结尾处不是分号。CASE语句以END CASE终止,CASE表达式以END结尾。
CASE表达式常用于SELECT INTO语句中,试举一例:
DECLARE v_sal_level varchar2(10); v_empno number(4) :=&empno; v_name varchar2(10); BEGIN SELECT ename, CASE WHEN sal >= 3000 THEN 'high' WHEN sal >= 1000 THEN 'medium' ELSE 'low' END INTO v_name,v_sal_level FROM emp WHERE EMPNO = v_empno; DBMS_OUTPUT.PUT_LINE(v_name||' salary is '||v_sal_level); END;
相关文章推荐
- Oracle Concept
- Oracle参数篇
- Oracle Dataguard之failover
- Oracle Dataguard之switchover
- Oracle Dataguard之Real-Time Apply
- Oracle Dataguard之物理standby的基本配置
- Oracle Linux
- 查看oracle创建表空间的sql语句
- 使用ora2pg完成从oracle到postgresql的迁移工作
- Mybatis中oracle、mysql、db2、sql server的like模糊查询
- 用oracle database作为hvr的hub的一个注意点
- Oracle中的RR日期格式与YY日期格式
- Oracle认证/维保技术支持服务找重庆思庄
- 利用sqoop导出hive数据到 oracle
- hibernate数据访问配置 10g ORacle
- 如何在Oracle Linux环境上安装yum
- Oracle数据类型之number
- oracle——SQL复习01
- Oracle 11G R2 用exp无法导出空表解决方法
- oracle 导入(imp)数据时的表空间(tablespace users)问题