`
20386053
  • 浏览: 433550 次
文章分类
社区版块
存档分类
最新评论

Oracle CASE语句

 
阅读更多

CASE语句从一个条件序列中选择并执行相应的语句。CASE语句主要包含两种类型:

  • 简单CASE语句,计算单个表达式值,并于几个可能值进行比较。
  • 搜索CASE语句,计算多个布尔表达式,并选择第一个值为true。

CASE语句适合于根据每个选择执行不同的动作。

简单CASE语句:

CASE case_operand
WHEN when_operand THEN statement ;
[WHEN when_operand THEN statement ; ]...
[ELSE statement [ statement ]... ;
END CASE;

搜索CASE语句:

CASE
WHEN boolean_expression THEN statement ;
[WHEN boolean_expression THEN statement ; ]...
[ELSE statement [ statement ]... ;
END CASE;

ELSE statement [statement ]...

在简单CASE语句中,当且仅当case_operand条件在when_operand中没有匹配值时,才会执行。

在搜索CASE语句,当且仅当boolean_expression表达式没有true时,才会执行。

如果省略ELSE子句,而且有没有匹配的条件。系统会抛出一个CASE_NOT_FOUND异常。

CASE表达式

使用CASE语句的两种表达式类型:

简单CASE表达式:=CASE case_operand
WHEN when_operand THEN statement ;
[WHEN when_operand THEN statement ; ]...
[ELSE statement [ statement ]... ;
END CASE;

搜索CASE表达式:=CASE
WHEN boolean_expression THEN statement ;
[WHEN boolean_expression THEN statement ; ]...
[ELSE statement [ statement ]... ;
END CASE;

Examples

1.简单CASE语句

declare
grade char(1);
begin
grade := 'B';

case grade
when 'A' then
dbms_output.put_line('Excellent');
when 'B' then
dbms_output.put_line('Very Good');
when 'C' then
dbms_output.put_line('Good');
when 'D' then
dbms_output.put_line('Fair');
when 'F' then
dbms_output.put_line('Poor');
end case;
end;

输出结果:
Very Good

2.搜索CASE语句

declare
grade char(1);
begin
grade := 'B';

case
when grade = 'A' then
dbms_output.put_line('Excellent');
when grade = 'B' then
dbms_output.put_line('Very Good');
when grade = 'C' then
dbms_output.put_line('Good');
when grade = 'D' then
dbms_output.put_line('Fair');
when grade = 'F' then
dbms_output.put_line('Poor');
else
dbms_output.put_line('No such grade');
end case;
end;

输出结果:
Very Good

3.搜索CASE语句(没有else子句)

declare
grade char(1);
begin
grade := 'E';

case
when grade = 'A' then
dbms_output.put_line('Excellent');
when grade = 'B' then
dbms_output.put_line('Very Good');
when grade = 'C' then
dbms_output.put_line('Good');
when grade = 'D' then
dbms_output.put_line('Fair');
when grade = 'F' then
dbms_output.put_line('Poor');
end case;
exception
when case_not_found then
dbms_output.put_line('No such grade');
end;

输出结果:
No such grade

3.简单CASE表达式

declare
grade char(1) := 'B';
appraisal varchar2(20);
begin
appraisal := case grade
when 'A' then
'Excellent'
when 'B' then
'Very Good'
when 'C' then
'Good'
when 'D' then
'Fair'
when 'F' then
'Poor'
else
'No such grade'
end;
dbms_output.put_line('Grade ' || grade || ' is ' || appraisal);
end;

输出结果:

Grade B is Very Good

4.搜索CASE表达式

declare
grade char(1) := 'B';
appraisal varchar2(120);
id number := 8429862;
attendance number := 150;
min_days constant number := 200;

function attends_this_school(id number) return boolean is
begin
return true;
end;

begin
appraisal := case
when attends_this_school(id) = false then
'Student not enrolled'
when grade = 'F' or attendance < min_days then
'Poor (poor performance or bad attendance)'
when grade = 'A' then
'Excellent'
when grade = 'B' then
'Very Good'
when grade = 'C' then
'Good'
when grade = 'D' then
'Fair'
else
'No such grade'
end;
dbms_output.put_line('Result for student ' || id || ' is ' || appraisal);
end;

输出结果:

Result for student 8429862 is Poor (poor performance or bad attendance)

如果是SQLPLUS中运行上面语句,默认是不会显示输出结果的。需要开启显示:

SQL> set serveroutput on;

分享到:
评论

相关推荐

    oracle case语句的介绍

    oracle中case的用法介绍,里面有case使用的一些实例

    oracle case when 语句的用法详解

    1. CASE WHEN 表达式有两种形式 代码如下:–简单Case函数 CASE sex ... CASE WHEN 在语句中不同位置的用法2.1 SELECT CASE WHEN 用法 代码如下:SELECT grade, COUNT (CASE WHEN sex = 1 THEN 1 /*sex 1为男生,2位

    Oracle-Decode()函数和CASE语句的比较

    本文讲述了Oracle-Decode()函数和CASE语句的比较。

    case乱码解决

    mysql 中case when 遇到乱码解决。查询语句中含有case引起中文乱码解决方法

    case when then语句用法

    该语句的执行过程是:将CASE后面表达式的值与各WHEN子句中的表达式的值进行比较,如果两者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。ELSE子句是可选项。当CASE语句中不...

    Oracle Exception汇总(自定义Oracle异常)

    使用CASE语句时在WHEN子句中没有包含必需的条件分支,并且没有包含ELSE语句。 对应ORA-06592错误。 COLLECTION_IS_NULL 给集合元素赋值前,必需初始化集合元素。对应ORA-06531错误。 CURSOR_ALRADY_OPEN 重新打开...

    oracle 存储过程 基础

    case 语句 case语句如果作为分支控制语句,最后结束语句是end case,如果是作为select语句里的控制语句则只需要end。

    ORACLE多条件统计查询的简单方法

    当满足CASE设定的条件时,就可以执行then语句。由于我要做的分组查询统计,是要罗列每一种情况,而且根据输入的“管理员编号”不同返回不同结果,结果记录的条数和每一种情况是可知的,这个语法完全可用 核心代码...

    oracle入门很简单10.zip

    oracle中的控制语句。 包括:条件语句 ifelse case when 循环语句 无条件循环 while循环 for循环

    Oracle高级sql学习与练习

    7、CASE表达式 8、ROWNUM-TOP-N分析 9、相关子查询和非相关子查询 10、增强GROUP BY 11、分析函数(ANALYTICAL FUNCTIONS) 12、ROWID的使用 13、ORACLE 10G正则表达式 14、使用HINT 15、PARITION分区 16、并行操作 ...

    详解Oracle数据库各类控制语句的使用

    Oracle数据库各类控制语句的使用是本文我们主要要介绍的内容,包括一些逻辑控制语句、Case when的使用、While的使用以及For的使用等等,接下来我们就开始一一介绍这部分内容,希望能够对您有所帮助。 Oracle 中逻辑...

    一次简单的Oracle恢复Case实战记录

    主要给大家介绍了一次简单的Oracle恢复Case实战过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Oracle的列转行问题

    Oracle中使用语句将行数据转换称不同的列表示,或者将不同的列数据写到同一列的不同行上的行列转换问题是一个非常传统的话题。 网络上流传了很多将行数据转换称列数据的方法和应用实例,一般通过decode或者case函数...

    Oracle_Database_11g完全参考手册.part2

    本书全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有新增功能和工具,如何执行功能强大的SQL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象-关系数据库。通过学习本书,您可以了解...

    oracle数据库截取字符串

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用

    Oracle_Database_11g完全参考手册.part5

    本书全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有新增功能和工具,如何执行功能强大的SQL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象-关系数据库。通过学习本书,您可以了解...

    Oracle Database 11g初学者指南--详细书签版

    5.6.3 CASE语句 141 5.6.4 Loop循环 142 5.6.5 WHILE循环 143 5.6.6 FOR循环 143 5.7 如何创建存储过程以及创建存储过程的原因 146 5.8 函数的创建和使用 149 5.9 调用PL/SQL程序 151 5.10 本章测验 152 第6...

Global site tag (gtag.js) - Google Analytics