数据库Oracle与Mysql语法对比:选择结构

时间:2022-10-18 14:52:27

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 值 1
WHEN 表达式 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();