PL/SQL Challenge 每日一题:2015-10-21 11G的PL/SCOPE功能

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

最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我打开了 PL/Scope 并且编译了这个过程:
ALTER SESSION SET plscope_settings='IDENTIFIERS:ALL'
/
CREATE OR REPLACE PROCEDURE plch_proc (arg_in IN NUMBER)
IS
BEGIN
NULL;
END;
/
然后我写了如下代码块:
BEGIN
FOR rec
IN ( /*SELECT*/ )
LOOP
DBMS_OUTPUT.put_line (rec.info);
END LOOP;
END;
/
哪些选项可用来取代/*SELECT*/注释,使得执行之后屏幕上会显示如下文本:
PLCH_PROC-DECLARATION
PLCH_PROC-DEFINITION
ARG_IN-DECLARATION
NUMBER-REFERENCE
(A)
SELECT name || '-' || usage info
FROM (SELECT name

, usage

, usage_id

, usage_context_id

FROM user_identifiers

WHERE object_name = 'PLCH_PROC' AND object_type = 'PROCEDURE')
START WITH usage_context_id = 0
CONNECT BY PRIOR usage_id = usage_context_id
(B)
SELECT name || '-' || usage info
FROM (SELECT name

, usage

, usage_id

, usage_context_id

FROM user_identifiers

WHERE object_name = 'PLCH_PROC' AND object_type = 'PROCEDURE')
START WITH usage_context_id = 0
CONNECT BY PRIOR usage_id = usage_parent_id
(C)
SELECT name || '-' || usage info
FROM user_identifiers
WHERE object_name = 'PLCH_PROC' AND object_type = 'PROCEDURE'
ORDER BY info DESC
(D)
SELECT name || '-' || usage info
FROM (SELECT name

, usage

, usage_id

, usage_context_id

FROM user_identifiers

WHERE object_name = 'PLCH_PROC' AND object_type = 'PROCEDURE')
START WITH name = 'PLCH_PROC'
CONNECT BY PRIOR name = object_name
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
B.压根就没有usage_parent_id这列
C.内容是想要的,但是直接order by并不是正确的顺序,貌似题目要强调顺序的。
D.object_name又是闹哪样啊?
我选A。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案A, 2楼得奖。
A:这个查询正确使用了usage_id和usage_context_id列以层次的顺序来获取PL/Scope的标识符数据:先是过程的声明部分,然后是它的定义,然后是参数的声明,以及它对NUMBER数据类型(在STANDARD报中定义)的引用。

B: 如果我用的是"usage_context_id"而不是"usage_parent_id" ,这个选项就对了。
C: 问题所要求的输出顺序并不是字母顺序,不管是正序还是反序。
D: 你不能用name 和 object_name 列来设置层次查询。相反,你必须用usage_id(子)和usage_context_id(父)。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行