最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... =typeid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我写了如下未完成的代码块:
DECLARE
TYPE numbers_t IS TABLE OF NUMBER;
l_table numbers_t := numbers_t ();
BEGIN
/*CHANGE*/
IF /*BOOLEAN*/ THEN
DBMS_OUTPUT.PUT_LINE ('TRUE');
END IF;
END;
假设在/*CHANGE*/注释这个地方你可以写所需的任何代码(填充l_table中的元素,或者让它保持为空,等等)
哪些选项包含了布尔表达式,可用来取代/*BOOLEAN*/注释,使得代码块执行之后永远会显示单词 "TRUE" ?
(A)
NVL(l_table.LAST,0) = l_table.COUNT
(B)
l_table.FIRST = 1 or l_table.FIRST IS NULL
(C)
l_table.PRIOR (l_table.FIRST) IS NULL
(D)
l_table.LIMIT IS NULL
(E)
l_table.TRIM IS NULL
答案CD,5楼得奖。
A: 嵌套表在初始化时是密集填充的,但是通过DELETE方法它们也可能变得稀疏。结果,集合中的最高索引值就可能比元素总数还大。
B: 嵌套表在初始化时是密集填充的,但是通过DELETE方法它们也可能变得稀疏。结果,最低索引值可能为NULL(当嵌套表为空时),或者也可能是 1 和2**31 - 1之间的任意正整数。
C: FIRST方法返回定义的最低索引值,或者在集合为空的情况下返回NULL。PRIOR只有一个参数,返回的是该参数的前一个有定义的索引值,如果参数已经是最低索引值则返回NULL。
D: LIMIT返回的是一个可变数组(VARRAY)中最大的元素个数。如果集合为嵌套表或者关联数组,这个方法永远返回NULL。
E: TRIM方法是一个过程,它从尾部去除制定个数的元素。它只能被用于嵌套表和可变数组。如果你试图像本选项那样使用TRIM, 你会看到这个错误:
PLS-00222: no function with name 'TRIM' exists in this scope
四十五度向上 发表于 2015-2-13 08:34
版主,请问 A/B 选项错在哪里了呢?
DECLARE
TYPE numbers_t IS TABLE OF NUMBER;
l_table numbers_t := numbers_t ();
BEGIN
l_table.extend;
l_table(1):=10;
l_table.extend;
l_table(2):=20;
l_table.extend;
l_table(3):=30;
l_table.delete(2);
DBMS_OUTPUT.PUT_LINE (l_table.COUNT);
DBMS_OUTPUT.PUT_LINE (l_table.LAST);
IF NVL(l_table.LAST,0) = l_table.COUNT THEN
DBMS_OUTPUT.PUT_LINE ('TRUE');
END IF;
END;
DECLARE
TYPE numbers_t IS TABLE OF NUMBER;
l_table numbers_t := numbers_t ();
BEGIN
l_table.extend;
l_table(1):=10;
l_table.extend;
l_table(2):=20;
l_table.extend;
l_table(3):=30;
l_table.delete(1);
DBMS_OUTPUT.PUT_LINE (l_table.COUNT);
DBMS_OUTPUT.PUT_LINE (l_table.first);
IF l_table.FIRST = 1 or l_table.FIRST IS NULL THEN
DBMS_OUTPUT.PUT_LINE ('TRUE');
END IF;
END;