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

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();

你可能感兴趣的:(#,SQL数据库,数据库,mysql,oracle)