楼主: newkid

[每日一题] PL/SQL CHALLENGE 每日一题

[复制链接]
论坛徽章:
548
生肖徽章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:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
121#
发表于 2011-11-10 10:57 | 只看该作者
F

使用道具 举报

回复
论坛徽章:
13
2010广州亚运会纪念徽章:轮滑
日期:2010-09-03 12:44:53马上有房
日期:2014-04-04 13:51:34马上加薪
日期:2014-04-04 13:35:40优秀写手
日期:2014-03-14 06:00:13夏利
日期:2013-08-05 18:32:18复活蛋
日期:2013-06-25 17:22:592013年新春福章
日期:2013-02-25 14:51:24蛋疼蛋
日期:2013-01-08 18:08:502011新春纪念徽章
日期:2011-02-18 11:43:33生肖徽章2007版:兔
日期:2011-01-20 12:58:49
122#
发表于 2011-11-10 21:35 | 只看该作者
执行一下,才发现,原来自己的pl、sql这么差

使用道具 举报

回复
论坛徽章:
14
奥运会纪念徽章:拳击
日期:2008-04-24 10:00:15CTO参与奖
日期:2009-02-12 11:45:482012新春纪念徽章
日期:2012-02-07 09:59:35ITPUB季度 技术新星
日期:2012-02-16 14:53:16鲜花蛋
日期:2012-03-19 18:10:462013年新春福章
日期:2013-02-25 14:51:242014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11
123#
发表于 2011-11-10 22:12 | 只看该作者
不错,好好学习

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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:532009日食纪念
日期:2009-07-22 09:30:00
124#
 楼主| 发表于 2011-11-10 23:42 | 只看该作者

2011-11-8 答案F.

包头声明的初始值先于包体。包体第一次被调用时会执行初始化代码,因而将包头里面的初始值覆盖了。
===================================================
2011-11-9 11G新功能:PL/SCOPE

注:关于PL/SCOPE可参考我翻译的这篇文章:
http://www.itpub.net/thread-1336860-1-1.html


我在会话中打开PL/Scope:
ALTER SESSION SET plscope_settings='identifiers:all'
/

然后我创建了如下的表和包:
CREATE TABLE plch_stuff
(
   amount   NUMBER
, rating   INTEGER
)
/

CREATE OR REPLACE PACKAGE plch_pkg
IS
   PROCEDURE do_stuff;
END plch_pkg;
/

CREATE OR REPLACE PACKAGE BODY plch_pkg

.......
END plch_pkg;
/

噢,抱歉,我不能让你看到包体的代码!请继续....


我对PL/Scope的USER_IDENTIFIERS视图进行如下查询:
SELECT type, usage
  FROM user_identifiers
WHERE object_name = 'PLCH_PKG'
ORDER BY 1, 2
/

我看到这些结果:
TYPE               USAGE
------------------ -----------
FUNCTION           CALL      
ITERATOR           DECLARATION
ITERATOR           REFERENCE  
LABEL              DECLARATION
PACKAGE            DECLARATION
PACKAGE            DEFINITION
PROCEDURE          DECLARATION
PROCEDURE          DEFINITION
VARIABLE           DECLARATION
VARIABLE           REFERENCE  
VARIABLE           REFERENCE

下面关于plch_pkg包的哪些句子是正确的?
(A)
包体里面没有任何私有(PRIVATE)的子程序。

(B)
do_stuff过程里面可能包含一个FORALL语句。

(C)
包体里面必须包含一个PACKAGE级别的变量(即不是在do_stuff里面声明的)。

(D)
do_stuff过程必须包含一个GOTO语句。

使用道具 举报

回复
论坛徽章:
27
ITPUB官方微博粉丝徽章
日期:2011-08-17 10:35:36托尼托尼·乔巴
日期:2017-10-25 16:45:57秀才
日期:2017-04-05 13:18:06秀才
日期:2017-03-02 10:35:322016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:302015年新春福章
日期:2015-03-06 11:57:312014年新春福章
日期:2014-02-18 16:42:022013年新春福章
日期:2013-02-25 14:51:24ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31
125#
发表于 2011-11-11 08:06 | 只看该作者
C
又是猜的。。。。。。

使用道具 举报

回复
论坛徽章:
548
生肖徽章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:222012新春纪念徽章
日期:2020-11-30 22:13:24海蓝宝石
日期:2012-02-20 19:24:27
126#
发表于 2011-11-11 10:56 | 只看该作者
C

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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:532009日食纪念
日期:2009-07-22 09:30:00
127#
 楼主| 发表于 2011-11-11 23:45 | 只看该作者
2011-11-9答案AB.
(A)
包体里面没有任何私有(PRIVATE)的子程序。

对应每个包里定义的过程你会看到两条记录:
PROCEDURE          DECLARATION
PROCEDURE          DEFINITION

对应每个包里定义的函数你会看到两条记录:
FUNCTION           DECLARATION
FUNCTION           DEFINITION

结果里面只有这样一对:
PROCEDURE          DECLARATION
PROCEDURE          DEFINITION

它就是对应于do_stuff过程,不再有其他子程序了。


(B)
do_stuff过程里面可能包含一个FORALL语句。

一个FORALL语句就像一个FOR循环,定义并且使用隐性游标。输出里这两行:
ITERATOR           DECLARATION
ITERATOR           REFERENCE  

有可能对应FORALL语句。

(C)
包体里面必须包含一个PACKAGE级别的变量(即不是在do_stuff里面声明的)。

这仅仅是“可能”而非“必须”。我们知道包体里面某处定义了一个变量,根据是这两行输出:
VARIABLE           DECLARATION
VARIABLE           REFERENCE

但这个变量可能在do_stuff内部定义。为了确定这个变量是不是PACKAGE级的,你必须知道所有程序单元的最小行号,然后看看这个变量定义行号是否在此之前。

(D)
do_stuff过程必须包含一个GOTO语句。

输出里面有这一行:
LABEL              DECLARATION

因此我们知道有一个标号被声明了,它可能出现在程序某处,像这样:
<<label_name>>

但是输出里面并没有指示这个标号被引用, 否则的话我们应该看到另外一行输出:
LABEL              REFERENCE

(newkid加注:即使看到标号被引用,也不意味着GOTO, 比如退出循环的EXIT也可以引用标号)

使用道具 举报

回复
论坛徽章:
520
奥运会纪念徽章:垒球
日期: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:532009日食纪念
日期:2009-07-22 09:30:00
128#
 楼主| 发表于 2011-11-11 23:55 | 只看该作者
2011-11-10 CLOB为空的判断
作者:Steven Feuerstein
难度:中

下列的哪些选项在执行之后会显示 "CLOB has a length of 0" ?

(A)
DECLARE
   l_clob   CLOB;
BEGIN
   IF l_clob IS NULL
   THEN
      DBMS_OUTPUT.put_line ('CLOB is NULL');
   ELSE
      DBMS_OUTPUT.put_line ('CLOB has a length of '
                             || LENGTH (l_clob));
   END IF;
END;
/

(B)
DECLARE
   l_clob   CLOB := EMPTY_CLOB ();
BEGIN
   IF l_clob IS NULL
   THEN
      DBMS_OUTPUT.put_line ('CLOB is NULL');
   ELSE
      DBMS_OUTPUT.put_line ('CLOB has a length of '
                             || LENGTH (l_clob));
   END IF;
END;
/


(C)
DECLARE
   l_clob   CLOB := '';
BEGIN
   IF l_clob IS NULL
   THEN
      DBMS_OUTPUT.put_line ('CLOB is NULL');
   ELSE
      DBMS_OUTPUT.put_line ('CLOB has a length of '
                             || LENGTH (l_clob));
   END IF;
END;
/


(D)
DECLARE
   l_clob1   CLOB := EMPTY_CLOB ();
   l_clob2   CLOB := l_clob1;
BEGIN
   IF l_clob2 IS NULL
   THEN
      DBMS_OUTPUT.put_line ('CLOB is NULL');
   ELSE
      DBMS_OUTPUT.put_line ('CLOB has a length of '
                             || LENGTH (l_clob2));
   END IF;
END;
/

使用道具 举报

回复
论坛徽章:
10000
绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2016-02-22 15:43:08绿钻
日期:2016-03-01 18:19:01绿钻
日期:2015-12-16 18:42:35绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-12-11 00:18:01绿钻
日期:2015-09-10 13:05:08绿钻
日期:2015-09-10 13:05:08
129#
发表于 2011-11-12 08:57 | 只看该作者
2011-11-10 CLOB为空的判断
==================
B和D吧

使用道具 举报

回复
论坛徽章:
13
2010广州亚运会纪念徽章:轮滑
日期:2010-09-03 12:44:53马上有房
日期:2014-04-04 13:51:34马上加薪
日期:2014-04-04 13:35:40优秀写手
日期:2014-03-14 06:00:13夏利
日期:2013-08-05 18:32:18复活蛋
日期:2013-06-25 17:22:592013年新春福章
日期:2013-02-25 14:51:24蛋疼蛋
日期:2013-01-08 18:08:502011新春纪念徽章
日期:2011-02-18 11:43:33生肖徽章2007版:兔
日期:2011-01-20 12:58:49
130#
发表于 2011-11-13 21:12 | 只看该作者
B

使用道具 举报

回复

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

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表