ITPUB论坛-中国专业的IT技术社区

 找回密码
 注册
查看: 519|回复: 2

[每日一题] PL/SQL Challenge 每日一题:2018-7-3 集合的EXISTS方法

[复制链接]
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
跳转到指定楼层
1#
发表于 2018-7-6 04:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
(原发表于 2011-10-10)

最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。

每两周的优胜者可获得itpub奖励的技术图书一本。

以往旧题索引:
/forum.php?m ... eid&typeid=1808

原始出处:
http://www.plsqlchallenge.com/

作者:Steven Feuerstein

运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品

我创建了这个“助手”函数来显示布尔变量的值:

CREATE OR REPLACE PROCEDURE plch_show_boolean (val IN BOOLEAN)
IS
BEGIN
   DBMS_OUTPUT.put_line (
      CASE val
         WHEN TRUE THEN 'TRUE'
         WHEN FALSE THEN 'FALSE'
         ELSE 'NULL'
      END);
END plch_show_boolean;
/

下列哪些选项中,哪个块执行之后会显示"FALSE"?


(A)
DECLARE
   my_list   DBMS_SQL.number_table;
   l_index   PLS_INTEGER;
BEGIN
   plch_show_boolean (my_list.EXISTS (l_index));
END;
/

(B)
DECLARE
   my_list   DBMS_SQL.number_table;
   l_index   PLS_INTEGER := 100;
BEGIN
   plch_show_boolean (my_list.EXISTS (l_index));
END;
/

(C)
DECLARE
   my_list          DBMS_SQL.number_table;
   l_index          PLS_INTEGER := 100;
   element_exists   BOOLEAN;
BEGIN
   BEGIN
      l_index := my_list (l_index);
      element_exists := TRUE;
   EXCEPTION
      WHEN NO_DATA_FOUND
      THEN
         element_exists := FALSE;
   END;

   plch_show_boolean (element_exists);
END;
/


(D)
DECLARE
   my_list   DBMS_SQL.number_table;
BEGIN
   plch_show_boolean (my_list.EXISTS (NULL));
END;
/

论坛徽章:
293
生肖徽章2007版:猴
日期:2008-05-16 11:28:59生肖徽章2007版:马
日期:2008-10-08 17:01:01SQL大赛参与纪念
日期:2011-04-13 12:08:17授权会员
日期:2011-06-17 16:14:53ITPUB元老
日期:2011-06-21 11:47:01ITPUB官方微博粉丝徽章
日期:2011-07-01 09:45:27ITPUB十周年纪念徽章
日期:2011-09-27 16:30:472012新春纪念徽章
日期:2012-01-04 11:51:22海蓝宝石
日期:2012-02-20 19:24:27铁扇公主
日期:2012-02-21 15:03:13
2#
发表于 2018-7-6 09:44 | 只看该作者
答案: ABCD

A: l_index NUMBER类型,默认初始值为0,my_list没有赋值,0也不存在
B: 初始值为100,my_list没有赋值,100不存在
C:  l_index := my_list (l_index) ,my_list没有赋值,my_list(100) 不存在,会触发例外,element_exists := FALSE,最后显示FALSE
D: EXISTS (NULL),不存在,返回逻辑FALSE

使用道具 举报

回复
论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
3#
 楼主| 发表于 2018-7-7 02:31 | 只看该作者
答案ABCD, 2楼得奖。

AD: 如果你将NULL传递给EXISTS方法,它返回的是FALSE
B: 如果你将一个非空值传递给EXISTS方法,并且在该位置没有定义元素,它返回的是FALSE
C: 在此选项中,我没有用EXISTS, 而是将它交给PL/SQL去引发一个NO_DATA_FOUND异常。然后我捕获了异常并且将布尔变量设置为FALSE
因此它会显示正确结果,但是你最好使用内置的EXISTS函数,而不是写这种代码并且依赖于异常被抛出(这会使得你的程序变慢)

使用道具 举报

回复

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

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表
http://www.vxiaotou.com