PL/SQL Challenge 每周一题:2021-11-6 CASE表达式

[复制链接]
查看11 | 回复1 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
https://devgym.oracle.com/
作者:Chris Saxon
运行环境:SQLPLUS, SERVEROUTPUT已打开, 最低版本要求:11.2
注:本题给出答案时候要求给予简要说明才能得到奖品
你开始写这个代码块,它含有一个简单CASE表达式:
declare
irrational ##REPLACE##;
begin
dbms_output.put_line ( 'Approximation for ' ||
case irrational
when 1.41 then 'square root 2'
when '03.14' then 'pi'
else 'something else'
end
);
end;
/
哪些选项可用来取代##REPLACE##,使得执行代码块会输出 "Approximation for pi"?

(A)
number := 3.14
(B)
integer := 3.14
(C)
char(10) := '3.14'
(D)
varchar2(10) := '3.14'
(E)
binary_double := 3.14

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案ACDE, 本期无人参与。
A:
当你执行一个简单CASE表达式,数据库会将所有的比较值转换成统一的类型。这里有数字和字符串的昏庸,所以所有的值都会被转换成数值型。所以表达式实际上就是:
case 3.14
when 1.41 then 'square root 2'
when 3.14 then 'pi'
else 'something else'
end
这会和pi值匹配。
B:
如同前一选项,数据库将所有比较值转换成数值型。
但是整数就没有小数点后的部分。所以当值被赋予整数型变量,数据库会将其舍入到最接近的整数。这意味着CASE表达式实际上是:
case 3
when 1.41 then 'square root 2'
when 3.14 then 'pi'
else 'something else'
end

所以它会返回 "something else".
C:
在一个简单CASE表达式重,如果有任何类型的差别,数据库会将它们全部转换成统一类型。因为第一个比较是数值,数据库会将所有的都转换成数值。所以这实际上就和A选项一样,会返回 "pi"
D:
如同前一选项,数据库将CASE表达式重的这个值转换成数值。
E:
一样的,数据库将CASE表达式重的所有值隐式转换成数值,所以这会返回"pi".
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行