有奖活动:PL/SQL Challenge 每日一题:2012-12-10 声明变量及初始化

[复制链接]
查看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已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
哪些选项在执行之后会显示 "100" ?
(A)
DECLARE
l_number NUMBER;
BEGIN
IF l_number IS NULL
THEN
l_number := 100;
END IF;
DBMS_OUTPUT.put_line (l_number);
END;
/


(B)
DECLARE
l_number NUMBER := 100;
BEGIN
DBMS_OUTPUT.put_line (l_number);
END;
/

(C)
DECLARE
l_number NUMBER;
PROCEDURE initialize
IS
BEGIN
l_number := 100;
END;
BEGIN
initialize;
DBMS_OUTPUT.put_line (l_number);
END;
/


(D)
DECLARE
l_number NUMBER DEFAULT 100;
BEGIN
DBMS_OUTPUT.put_line (l_number);
END;
/

(E)
DECLARE
l_number NUMBER INITIAL 100;
BEGIN
DBMS_OUTPUT.put_line (l_number);
END;
/
(F)
DECLARE
l_number NUMBER;
PROCEDURE initialize
IS
BEGIN
l_number := 100;
END;
BEGIN
DBMS_OUTPUT.put_line (l_number);
END;
/

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案:A, B, C, D
A, NUMBER类型的变量默认初始化为NULL
B, 声明变量的时候就初始化为100
C, 在最外层块中的l_number变量相对于嵌套initialize子程序是可见的,所以可以在initialize子程序中被修改。
D, 在声明时,通过default指定默认值。
E, 编译错误,变量声明语法错误,INITIAL是什么意思,没用过。
F, 什么也不会输出,虽然initialize子程序修改了l_number的值,这与C类似,但它并没有调用initialize子程序,所以l_number仍然为NULL。

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
PL/SQL相比SQL更加生疏,头一次知道还可以有C这种写法。。
F只定义没有调用
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
ABCD
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案F,oracle應該不支持靜態變量和靜態塊這個東西吧
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
大家都起來這麼早,4點多,5點多都起來了……
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
udfrog 发表于 2012-12-12 07:34
PL/SQL相比SQL更加生疏,头一次知道还可以有C这种写法。。
F只定义没有调用

难道牛蛙不用PLSQL


回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
visual2006 发表于 2012-12-12 09:36
难道牛蛙不用PLSQL

说来惭愧,我基本只知道create的语法,以前写过的,procedure里面其实都是sql语句,根本不能算用过plsql
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案ABCD, 2楼得奖。
E:语法错误
F:声明了初始化函数但是没有执行。
C答案看起来很罗嗦,在本题当然是不必要的。但是据作者说有两个好处:
1.万一初始化出了异常,在当前块内可以处理。按ABD的做法,声明时候出了异常会往外抛出,当前块捕获不到。
2.如果初始化动作很复杂,这部分操作被模块化并移出来,执行部分的代码变得比较清爽。

回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行