有奖活动:PL/SQL Challenge 每日一题:2012-8-27 OUT参数未赋值

[复制链接]
查看11 | 回复9 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
最快答对且答案未经编辑的puber将获得奥运章一枚(编辑过的答案不算),其他会员如果提供有价值的分析、讨论也可获得奥运章一枚。
以往旧题索引:
http://www.itpub.net/thread-1499223-1-1.html
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
难度:中
注:本题给出答案时候要求给予简要说明才能得到奖品
我创建了如下过程:
CREATE OR REPLACE PROCEDURE plch_proc (
n_in IN NUMBER, n_out OUT NUMBER)
IS
BEGIN
IF n_in > 1000
THEN
n_out := n_in / 10;
ELSIF n_out > 0
THEN
n_out := n_out * 2;
END IF;
END;
/
哪些选项执行之后会显示"200" ?
(A)
DECLARE
n1 NUMBER := 2000;
n2 NUMBER := 500;
BEGIN
plch_proc (n1, n2);
DBMS_OUTPUT.put_line (n2);
END;
/
(B)
DECLARE
n1 NUMBER := 1000;
n2 NUMBER := 100;
BEGIN
plch_proc (n1, n2);
DBMS_OUTPUT.put_line (n2);
END;
/
(C)
DECLARE
n1 NUMBER;
n2 NUMBER;
BEGIN
plch_proc (n1, n2);
DBMS_OUTPUT.put_line (n2);
END;
/
(D)
DECLARE
n1 NUMBER;
n2 NUMBER := 100;
BEGIN
plch_proc (n1, n2);
DBMS_OUTPUT.put_line (n2);
END;
/


回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案: A,B,D
原因是if条件只能执行一个条件。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案是A.
n2对应的是out参数,不管执行的时候有没给n_out传值都一样,即使传值了也没用。
所以A:2000/10=200,输出200.
BCD,结果是null.
这题的考点应该就是in,out参数吧。
具体的不是太懂,我是对着调试信息琢磨的,请楼主马里奥讲解下。

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
原来帖子标题里已经标明out参数了,之前没注意,呵呵。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
bell6248 发表于 2012-8-29 07:47
答案: A,B,D
原因是if条件只能执行一个条件。

BD,运行结果是null吧。没有任何输出。


回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
选A
A 走n_in>1000
BCD 都不走n_in>1000, 由于n_out是out,而不是in out,传初始值没用,根本不走else
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
out和 in out 的区别。细节决定成败
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
开始也以为是ABD,虽然知道IN /OUT/IN OUT的作用,但之前对于OUT不能传递参数还真不知道。现在理解了。。。。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
很迷惑人的啊,如果还有个nocopy,可以设计的非常迷惑人
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
不错。第一感觉是abd。。。结果。。。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行