PL/SQL Challenge 每日一题:2015-6-8 子程序的RETURN

[复制链接]
查看11 | 回复5 | 2008-9-15 01:28:12 | 显示全部楼层 |阅读模式
(原发表于2010-11-19)

最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
下列关于RETURN语句的说法哪些是正确的?
(A)
RETURN语句只能在函数中执行。
(B)
你总是可以在RETURN关键字后面指定一个表达式,如下:
RETURN expression;
(C)
一个函数至少要在执行部分带有一个RETURN语句,否则就会编译失败。
(D)
RETURN语句只能够在执行部分运行。(译者注:执行部分指的是一个PL/SQL块的BEGIN和EXCEPTION之间的部分)
(E)以上说法都不对。

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
D
A 存储过程中可以使用return语句退出对过程的调用;
B 存储过程中使用return退出调用,不能指定表达式;
C return在函数的执行部分不是必须的;

回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
四十五度向上 发表于 2015-6-12 07:26
D
A 存储过程中可以使用return语句退出对过程的调用;

选E;其中D也不对:
------------------DECLARE i NUMBER;BEGINSELECT 'a' INTO i FROM dual;EXCEPTION WHEN OTHERS THENRETURN;END; 复制代码
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
DylanX 发表于 2015-6-12 09:33
选E;其中D也不对:
------------------

对哦,应该是非声明部分?
这个头像换的 。。。。。
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
四十五度向上 发表于 2015-6-12 09:41
对哦,应该是非声明部分?
这个头像换的 。。。。。


头像是摘的oracle magazine上 tom专栏的头像。。。P得有点过。
C我也试了一下,编译可以过,不过有个编译告警:
----------------------CREATE OR REPLACE FUNCTION f1 RETURN NUMBER ISBEGINNULL;END;-----------提示:函数'f1'不返回一个值。复制代码
回复

使用道具 举报

千问 | 2008-9-15 01:28:12 | 显示全部楼层
答案E, 本期无人得奖。
A: 错,你可以在过程中执行一个RETURN语句。碰到这个语句时国会立即终止执行,控制权被返回给调用块。
B: 如果这个函数是一个管道表函数,那么你只需要返回控制权,索引的数据已经被“排出去”了。此外,如果你是在一个过程中执行RETURN,此时你并不需要返回任何数据,而只是控制权。
C: 如果你的函数完全不包含RETURN, PL/SQL编译器并不会报错。然而,如果你打开了警告,当oracle检测到某个逻辑分支没有执行RETURN,你就会看到一个警告。
D: 你可以在执行部分或者异常处理部分执行RETURN。你可能会问,为什么一个程序员想要在异常处理器执行RETURN语句呢?考虑如下情形:如果这个错误没有严重到必须停止进一步处理,我们或许只需要记录或者辨识出这个错误,然后优雅地返回到调用块,可能带有某种状态代码。在这种情况下,在异常处理器中的RETURN就很有道理了。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行