oracle异常使用goto,PL/SQL Challenge 每日一题:2013-10-25异常处理中的GOTO

最先答对且答案未经编辑的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已打开

注:本题给出答案时候要求给予简要说明才能得到奖品

我创建了两张表并填入数据:

CREATE TABLE plch_mammals

(

the_name               VARCHAR2 (100) PRIMARY KEY,

gives_birth_in_water   CHAR (1)

)

/

CREATE TABLE plch_food

(

mammal_name   VARCHAR2 (100)

REFERENCES plch_mammals (the_name),

yum_yum       VARCHAR2 (100)

)

/

BEGIN

INSERT INTO plch_mammals VALUES ('Squirrel', 'N');

INSERT INTO plch_mammals VALUES ('Whale', 'Y');

INSERT INTO plch_mammals VALUES ('Hippopotamus', 'Y');

INSERT INTO plch_food VALUES ('Squirrel', 'Acorn');

INSERT INTO plch_food VALUES ('Whale', 'Plankton');

INSERT INTO plch_food VALUES ('Hippopotamus', 'Grass');

COMMIT;

END;

/

哪些选项执行之后不会显示"All done"?

(A)

BEGIN

DELETE FROM plch_food

WHERE yum_yum = 'Grass';

DELETE FROM plch_mammals

WHERE the_name = 'Whale';

DBMS_OUTPUT.put_line ('All done');

END;

/

(B)

BEGIN

BEGIN

DELETE FROM plch_food

WHERE yum_yum = 'Grass';

EXCEPTION

WHEN OTHERS

THEN

DBMS_OUTPUT.put_line ('Still have grass');

END;

BEGIN

DELETE FROM plch_mammals

WHERE the_name = 'Whale';

EXCEPTION

WHEN OTHERS

THEN

DBMS_OUTPUT.put_line ('Whales endangered');

END;

DBMS_OUTPUT.put_line ('All done');

END;

/

(C)

DECLARE

l_next_step   VARCHAR2 (5);

BEGIN

l_next_step := 'Whale';

DELETE FROM plch_food

WHERE yum_yum = 'Grass';

<>

DELETE FROM plch_mammals

WHERE the_name = 'Whale';

DBMS_OUTPUT.put_line ('All done');

EXCEPTION

WHEN OTHERS

THEN

GOTO l_next_step;

END;

/

(D)

DECLARE

l_next_step   VARCHAR2 (5);

BEGIN

l_next_step := 'Whale';

DELETE FROM plch_food

WHERE yum_yum = 'Grass';

<>

l_next_step := 'Done';

DELETE FROM plch_mammals

WHERE the_name = 'Whale';

<>

DBMS_OUTPUT.put_line ('All done');

EXCEPTION

WHEN OTHERS

THEN

CASE l_next_step

WHEN 'Whale'

THEN

GOTO whale;

WHEN 'Done'

THEN

GOTO done;

END CASE;

END;

/

(E)

BEGIN

BEGIN

DELETE FROM plch_food

WHERE yum_yum = 'Grass';

EXCEPTION

WHEN OTHERS

THEN

RAISE;

END;

BEGIN

DELETE FROM plch_mammals

WHERE the_name = 'Whale';

EXCEPTION

WHEN OTHERS

THEN

RAISE;

END;

DBMS_OUTPUT.put_line ('All done');

END;

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值