PL/SQL Challenge 每日一题:2014-11-13 布尔条件表达式

[复制链接]
查看11 | 回复9 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
哪些选项在执行之后会显示 "Truth comes first" ?

(A)
BEGIN
IF 'true' > 'false'
THEN
DBMS_OUTPUT.put_line ('Truth comes first');
END IF;
END;
/
(B)
BEGIN
IF TRUE > FALSE
THEN
DBMS_OUTPUT.put_line ('Truth comes first');
END IF;
END;
/
(C)
BEGIN
IF GREATEST (TRUE, FALSE)
THEN
DBMS_OUTPUT.put_line ('Truth comes first');
END IF;
END;
/
(D)
BEGIN
IF TRUE != FALSE
THEN
DBMS_OUTPUT.put_line ('Truth comes first');
END IF;
END;
/

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
文档中好不容易找到这样一段话,解释了我心中的迷惑
BOOLEAN Comparisons
By definition, TRUE is greater than FALSE. Any comparison with NULL returns NULL.
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
A 比较的是字符 'true' 与'false' 的大小 , False有5位比前者多1位, 所以是false ,条件不成立
B.是布尔值比较,条件成立, 可以出结果
C。 是布尔值比较,条件成立, 可以出结果
D 是布尔值比较,条件成立, 可以出结果
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
本帖最后由 xkf01 于 2014-11-17 10:19 编辑
xkf01 发表于 2014-11-17 10:10
A 比较的是字符 'true' 与'false' 的大小 , False有5位比前者多1位, 所以是false ,条件不成立
B.是 ...

我错了。。
A 是优先比较T 与F字符的大小。 我想多了,把他们当数字一样,考虑了位数 。结果还是能出来
C。GREATEST 不能用在 true和 false里面。。。具体为什么不知道。。系统报错。。。真丢人。。基础不牢
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
本帖最后由 jhlxj 于 2014-11-17 11:14 编辑
学习了,膜拜各种大神
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案:ABD
A选项 是字符比较,字符比较采用按位比较,正确。
BD选项都是布尔比较,正确。
C选项 if后面不能直接加函数吧,且greatest只能比较Number和char类型吧,错误。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
能写if true
then

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案ABD
A:比较字符串是按照字符的ASCII比的。
B:属于boolean类型的比较,true大于false。
C:GREATEST函数不能用于boolean比较。
D:比较boolean。true!=false.正确!
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案ABD, 6楼得奖。7楼说的写法是行得通的。
A: 在这里我们比较的不是布尔型值而只是字符串。既然"t" 在 "f"之后,这是正确的。
B: 奇怪得很,你可以在布尔型使用 > 和 <,并且TRUE比FALSE大。
这并不是隐式转换为字符串的影响——PL/SQL并不会隐性转换布尔型。这也是为什么你不能把一个布尔型传递给DBMS_OUTPUT.PUT_LINE来显示。
C: GREATEST 不接受布尔型作为参数。
D: 你当然可以在布尔型使用等值和不等值比较操作符——并且TRUE不会等于FALSE, 所以这是正确的。

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
newkid 发表于 2014-11-18 05:43
答案ABD, 6楼得奖。7楼说的写法是行得通的。
A: 在这里我们比较的不是布尔型值而只是字符串。既然"t" 在 ...

B是看起来很奇怪,我在2#贴解释了,看了就明白了
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行