数据库Oracle与Mysql语法对比:选择结构
2016-11-11 14:07
441 查看
CASE 语句适用于分情况的多分支处理,可有以下三种用法。
WHEN 表达式 1 THEN 语句序列 1 WHEN 表达式 2 THEN 语句序列 2
WHEN 表达式 n THEN 语句序列 n ELSE 语句序列 n+1 END CASE;
在整个结构中,选择变量的值同表达式的值进行顺序匹配,如果相等,则执行相应的
语句序列,如果不等,则执行 ELSE 部分的语句序列。 以下是一个使用 CASE 选择结构的练习。
【训练 1】 使用 CASE 结构实现职务转换。 输入并执行程序:
执行结果:
雇员职务:系统分析员
WHEN 表达式 2 THEN 值 2
WHEN 表达式 n THEN 值 n
ELSE 值 n+1
END;
【训练 2】 使用 CASE 的表达式结构。
执行结果为: 评价等级:良
CASE
WHEN 条件表达式 1 THEN 语句序列 1 WHEN 条件表达式 2 THEN 语句序列 2
WHEN 条件表达式 n THEN 语句序列 n
ELSE
语句序列 n+1 END CASE;
【训练 3】 使用 CASE 的搜索结构。
执行结果为: 工资等级:高
例:
【训练 1】 使用 CASE 结构实现职务转换。
Oracle
1.基本 CASE 结构
语句的语法如下: CASE 选择变量名WHEN 表达式 1 THEN 语句序列 1 WHEN 表达式 2 THEN 语句序列 2
WHEN 表达式 n THEN 语句序列 n ELSE 语句序列 n+1 END CASE;
在整个结构中,选择变量的值同表达式的值进行顺序匹配,如果相等,则执行相应的
语句序列,如果不等,则执行 ELSE 部分的语句序列。 以下是一个使用 CASE 选择结构的练习。
【训练 1】 使用 CASE 结构实现职务转换。 输入并执行程序:
SET SERVEROUTPUT ON DECLARE v_job VARCHAR2(10); BEGIN SELECT job INTO v_job FROM emp WHERE empno=7788; CASE v_job WHEN 'PRESIDENT' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:总裁'); WHEN 'MANAGER' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:经理'); WHEN 'SALESMAN' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:推销员'); WHEN 'ANALYST' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:系统分析员'); WHEN 'CLERK' THEN DBMS_OUTPUT.PUT_LINE('雇员职务:职员'); ELSE DBMS_OUTPUT.PUT_LINE('雇员职务:未知'); END CASE; END;
执行结果:
雇员职务:系统分析员
2.表达式结构 CASE 语句 在 Oracle 中,CASE 结构还能以赋值表达式的形式出现,它根据选择变量的值求得不同的结果。
它的基本结构如下: 变量=CASE 选择变量名 WHEN 表达式 1 THEN 值 1WHEN 表达式 2 THEN 值 2
WHEN 表达式 n THEN 值 n
ELSE 值 n+1
END;
【训练 2】 使用 CASE 的表达式结构。
SET SERVEROUTPUT ON DECLARE v_grade VARCHAR2(10); v_result VARCHAR2(10); BEGIN v_grade:='B'; v_result:=CASE v_grade WHEN 'A' THEN '优' WHEN 'B' THEN '良' WHEN 'C' THEN '中' WHEN 'D' THEN '差' ELSE '未知' END; DBMS_OUTPUT.PUT_LINE('评价等级:'||V_result); END;
执行结果为: 评价等级:良
3.搜索 CASE 结构
Oracle 还提供了一种搜索 CASE 结构,它没有选择变量,直接判断条件表达式的值,根据条件表达式决定转向。CASE
WHEN 条件表达式 1 THEN 语句序列 1 WHEN 条件表达式 2 THEN 语句序列 2
WHEN 条件表达式 n THEN 语句序列 n
ELSE
语句序列 n+1 END CASE;
【训练 3】 使用 CASE 的搜索结构。
SET SERVEROUTPUT ON DECLARE v_sal NUMBER(5); BEGIN SELECT sal INTO v_sal FROM emp WHERE empno=7788; CASE WHEN v_sal>=3000 THEN DBMS_OUTPUT.PUT_LINE('工资等级:高'); WHEN v_sal>=1500 THEN DBMS_OUTPUT.PUT_LINE('工资等级:中'); ELSE DBMS_OUTPUT.PUT_LINE('工资等级:低'); END CASE; END;
执行结果为: 工资等级:高
Mysql
语法基本与Oracle一致。例:
【训练 1】 使用 CASE 结构实现职务转换。
DELIMITER $$ create procedure case1() BEGIN DECLARE v_job VARCHAR(10); SELECT job INTO v_job FROM emp WHERE empno=7788; CASE v_job WHEN 'PRESIDENT' THEN select '雇员职务:总裁'; WHEN 'MANAGER' THEN select'雇员职务:经理'; WHEN 'SALESMAN' THEN select'雇员职务:推销员'; WHEN 'ANALYST' THEN select'雇员职务:系统分析员'; WHEN 'CLERK' THEN select'雇员职务:职员'; ELSE select'雇员职务:未知'; END CASE; END$$ call case1();
相关文章推荐
- 数据库Oracle与Mysql语法对比:循环结构
- 数据库Oracle与Mysql语法对比:存储过程
- 主流数据库复制表结构(SqlServer/Mysql/Oracle/Sybase)[语法差异分析]
- 数据库Oracle与Mysql语法对比:集合运算
- 数据库Oracle与Mysql语法对比:组函数的嵌套使用
- 数据库Oracle与Mysql语法对比:函数
- 数据库Oracle与Mysql语法对比:变量赋值
- 数据库Oracle与Mysql语法对比:联结(Join)
- 数据库Oracle与Mysql语法对比:触发器
- Jsp 连接 mySQL、Oracle 数据库备忘(Windows平台) 选择自 dazern 的 Blog
- MySQL与Oracle 语法对比
- MySQL与Oracle的语法区别详细对比 (转)
- 数据库学习之--Oracle 架构与MySQL架构对比
- MySQL与Oracle的语法区别详细对比
- mysql和oracle的区别(功能性能、选择、使用它们时的sql等对比)
- ORACLE-DB2-SQLSERVER-MYSQL 数据库 时间转换 查询表结构
- 【sql入门】根据要求绘制E/R图,创建数据库(2)mySQL建表基本语法及主键外键选择
- [转]MySQL与Oracle的语法区别详细对比
- 数据库oracle与mysql在语法上的区别
- MySQL与Oracle的语法区别详细对比