最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Steven Feuerstein
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
我执行了这些语句:
create table plch_data (
the_key integer,
the_value varchar2(100))
/
begin
insert into plch_data values
(1, 'One');
insert into plch_data values
(2, 'Two');
insert into plch_data values
(2, 'Three');
end;
/
create or replace procedure plch_log_error (
key_in in integer default null)
is
begin
dbms_output.put_line ('Error='||sqlcode);
end plch_log_error;
/
哪些选项可用来取代下列过程中的 ##REPLACE## :
create or replace procedure plch_proc (
key_in in plch_data.the_key%TYPE)
is
l_value plch_data.the_value%TYPE;
begin
select the_value into l_value
from plch_data
where the_key = key_in;
exception
##REPLACE##
end plch_proc;
/
使得下列代码执行之后会显示下方的两行文本:
begin
begin
plch_proc (0);
exception
when others
then
null;
end;
begin
plch_proc (2);
exception
when others
then
null;
end;
end;
/
Error=100
Error=-1422
注意:NO_DATA_FOUND异常返回的SQLCODE是100, TOO_MANY_ROWS异常返回的SQLCODE是-1422
(A)
when no_data_found
then
plch_log_error;
raise no_data_found;
when too_many_rows
then
plch_log_error;
raise too_many_rows;
(B)
when others
then
plch_log_error;
raise;
(C)
when others
then
plch_log_error;
case sqlcode
when 100 then raise no_data_found;
when -1422 then raise too_many_rows;
end case;
|