pl/sql每日一题

[复制链接]
查看11 | 回复7 | 2013-12-9 14:13:35 | 显示全部楼层 |阅读模式
我已经征得《oracle开发版》版主NEWKID大师的同意,可以将他的“oracle每日一题”转到本版。我将这些题目(或许稍微改动)在DM7上运行,验证下DM7是否完全兼容。原帖:http://www.itpub.net/thread-1824349-1-1.html

考点:continue和goto语句
哪些选项在执行之后会输出如下文本:
The Value is : 1
The Value is : 2
The Value is : 5
(A)
DECLARE
l_value NUMBER (5) := 1;
BEGIN
>
WHILE l_value >
NULL;
END IF;
END LOOP;
END;
/

DM7的执行结果与oracle完全一样,答案简评如下:
A: (不推荐)
在11.1以前,你可能会考虑这么使用GOTO, 但现在你该用CONTINUE了。
B: (推荐)
CONTINUE语句是11.1加入的,它可以带条件或者无条件退出循环的当前迭代,进入下一次的迭代,可以是当前循环的也可以是任意外层的带有标记的循环。
C: (不推荐)
这个结构能得到正确答案,但是CONTINUE更好地达到了目的。
D: (推荐)
这个选项展示了你可以用一个简单的CONTINUE(相对于CONTINUE WHEN而言)来退出循环的当前迭代。
E: (推荐)
这个选项会报错: "PLS-00375: illegal GOTO statement; this GOTO cannot branch to label 'LOOPSTART'"
GOTO语句不能够进入IF/ELSE语句的分支。
DM7报“非法的GOTO STMT”错误,原因一样,goto必须要跳出if..else结构体。

回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层



回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
DBMS_OUTPUT.put_line 也应该支持?
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
〇〇 发表于 2013-10-27 19:52
DBMS_OUTPUT.put_line 也应该支持?

默认是不支持的,需要执行下 SP_CREATE_SYSTEM_PACKAGES (1);
来创建除了DBMS_DBG、DBMS_GEO和DBMS_JOB以外的所有系统包。
删除这些系统包则执行:SP_CREATE_SYSTEM_PACKAGES (0);
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
jllioo0 发表于 2013-10-27 20:15
默认是不支持的,需要执行下 SP_CREATE_SYSTEM_PACKAGES (1);
来创建除了DBMS_DBG、DBMS_GEO和DBMS_JOB以 ...

那为什么lz说不能打印呢
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
〇〇 发表于 2013-10-27 20:19
那为什么lz说不能打印呢

可以输出啊,估计LZ搞错了吧
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
tanyangxf 发表于 2013-10-28 09:34
可以输出啊,估计LZ搞错了吧

呵呵,有点小误会,我们一般都用print习惯了。那个dbms_output的兼容,必须可以打印的。
回复

使用道具 举报

千问 | 2013-12-9 14:13:35 | 显示全部楼层
本帖最后由 myth8860 于 2013-10-28 14:08 编辑
disql命令行工具中运行:set serveroutput on;
可以打印出来,管理工具需要改进一下。
dmserver的后台都可以打印出来。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行