PL/SQL Challenge 每日一题:2015-8-12 PL/SQL的CASE语句

[复制链接]
查看11 | 回复9 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
(原发表于2010-12-24)

最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:MikeB
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
这个代码块执行之后屏幕上会输出什么?
DECLARE
the_text VARCHAR2 (100);
BEGIN
DECLARE
todays_date DATE := TO_DATE ('241210', 'DDMMRR');
BEGIN
CASE TO_NUMBER (TO_CHAR (todays_date, 'DD'))
WHEN 23
THEN

the_text := 'Not yet Xmas';
WHEN 25
THEN

the_text := 'Xmas day';
END CASE;
the_text := 'Santa is coming (for some, sort of, maybe)';
EXCEPTION
WHEN OTHERS
THEN
the_text := 'Today is the 24th';
END;
DBMS_OUTPUT.put_line (the_text);
END;
(A)
Not yet Xmas
(B)
Xmas day
(C)
Santa is coming (for some, sort of, maybe)
(D)
Today is the 24th

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
我选D。
TO_NUMBER (TO_CHAR (todays_date, 'DD'))返回的是24,在case中找不到,报错,进入异常处理,
the_text := 'Today is the 24th';应该加else 更好。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
为什么case中找不到,报错
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
〇〇 发表于 2015-8-15 20:04
为什么case中找不到,报错

找不到就找不到,不行吗
SQL> DECLARE
2the_text VARCHAR2 (100);
3 BEGIN
4DECLARE
5 todays_date DATE := TO_DATE ('241210', 'DDMMRR');
6BEGIN
7 CASE TO_NUMBER (TO_CHAR (todays_date, 'DD'))
8
WHEN 23
9
THEN
10
the_text := 'Not yet Xmas';
11
WHEN 25
12
THEN
13
the_text := 'Xmas day';
14 END CASE;
15
16 the_text := 'Santa is coming (for some, sort of, maybe)';
17END;
18
19DBMS_OUTPUT.put_line (the_text);
20 END;
21/
DECLARE
*
第 1 行出现错误:
ORA-06592: 执行 CASE 语句时未找到 CASE
ORA-06512: 在 line 7

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
楼上和楼上的楼上是两个人吗?
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案D, 2楼得奖。
如果在一个CASE语句中没有ELSE子句,而且找不到任何匹配的WHEN子句,那么ORACLE会报错:
"ORA-06592: CASE not found while executing CASE statement"
你可以不为CASE表达式提供ELSE子句。如果找不到匹配的WHEN子句,ORACLE会为那个表达式返回NULL。

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
〇〇 发表于 2015-8-15 20:04
为什么case中找不到,报错

case语句不是case表达式
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
截止到今日,每日一题奖励已发~
辛苦newkid大师~
本阶段14期每日一题Naldonado童鞋获奖了13期,

继续


回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
lastwinner 发表于 2015-8-18 09:37
case语句不是case表达式

这个case还是特殊,c语言的没有default也行
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
Naldonado 发表于 2015-8-15 08:10
我选D。
TO_NUMBER (TO_CHAR (todays_date, 'DD'))返回的是24,在case中找不到,报错,进入异常处理,
th ...

开始有点小崇拜了,对你~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行