有奖活动:PL/SQL Challenge 每日一题:2013-2-19 重复变量名

[复制链接]
查看11 | 回复9 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
最先答对且答案未经编辑的puber将获得奥运章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得奥运章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
http://www.itpub.net/thread-1499223-1-1.html
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
哪些选项在执行之后会显示 "1" ?
(A)
DECLARE
l_variable NUMBER := 1;
l_variable DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.put_line (1);
END;
/

(B)
DECLARE
l_variable NUMBER := 1;
l_variable DATE := SYSDATE;
BEGIN
DECLARE
l_variable NUMBER := 1;
BEGIN
DBMS_OUTPUT.put_line (l_variable);
END;
END;
/

(C)
DECLARE
l_variable NUMBER := 1;
l_variable DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.put_line (l_variable);
END;
/

(D)
DECLARE
l_variable NUMBER := 1;
l_variable DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.put_line (POWER (l_variable, 1));
END;
/

(E)
DECLARE
l_variable NUMBER := 1;
l_variable2 l_variable%TYPE := 1;
l_variable DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.put_line (1);
END;
/


回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
一个块还能重复定义变量?
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
本来觉着E也对,但是在本机执行了一下,发现答案应该是:AB
下面是我的思路,关于E的编译过程不清楚,希望高人指点。
A:执行正常,PL/SQL块总是从BEGIN执行块开始,直至执行结束END;未调用声明部分的变量,因此执行成功。
B:执行正常,该PL/SQL块有一个嵌套的匿名块程序,其变量的作用域是匿名块中的DECLARE部分,因此执行成功。
C:编译错误,在执行块编译的过程中,访问声明块中的变量,变量进行隐式转换产生错误,因为同一个变量的声明的类型大小均不一致。
D:编译错误,在执行块编译的过程中,访问声明块中的变量,变量进行隐式转换产生错误,因为同一个变量的声明的类型大小均不一致。
E:在声明块中,使用了%TYPE,这种是一个弱类型的变量,好像是锚定到列,具体过程不太清楚。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案:A,B
C,产生错误PLS-00371,l_variable重复定义
D, 与C类似
E, 与C类似,引用l_variable不确定用的是哪一个
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
我覺得就B 對..
其他編譯都會錯吧.
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
我覺得就B 對..
其他編譯都會錯吧.
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
汗,執行了一下.
A 也是對的...

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
foxdyxi 发表于 2013-2-21 08:14
汗,執行了一下.
A 也是對的...


叫你不實踐
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
学习下啊!
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
私水流年 发表于 2013-2-21 06:42
本来觉着E也对,但是在本机执行了一下,发现答案应该是:AB
下面是我的思路,关于E的编译过程不清楚,希望高 ...

因为使用了定义的变量,所以就会报错啊
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行