题目:
世界上有很多不同品种的豚鼠,其中有一些具有可以识别的特征。比如:“埃塞俄比亚人(Abyssinians)”外皮上具有带褶皱的花环
“特塞尔绵羊(Texels)”有长长的卷毛。而“克雷斯特白豚鼠White Crested Guinea Pig”在头上一个白色的花纹(不出所料)
下列的每个选项提供了plch_proc过程的一种实现方法,它会显示给定特征的豚鼠品种;这个过程并不完备
哪些选项在执行下列的代码块之后会显示如下的两行?
Species=Texel Species= BEGIN plch_proc (\'curly\'); plch_proc (\'white\'); END; /
(A)
CREATE OR REPLACE PROCEDURE plch_proc (feature_in IN VARCHAR2)
IS
l_guinea_pig_species VARCHAR2 (100);
BEGIN
CASE feature_in
WHEN \'curly\'
THEN
l_guinea_pig_species := \'Texel\';
WHEN \'rosettes\'
THEN
l_guinea_pig_species := \'Abyssinian\';
END CASE;
DBMS_OUTPUT.put_line (\'Species=\' || l_guinea_pig_species);
END;
/
(B)
CREATE OR REPLACE PROCEDURE plch_proc (feature_in IN VARCHAR2)
IS
l_guinea_pig_species VARCHAR2 (100);
BEGIN
l_guinea_pig_species :=
CASE feature_in
WHEN \'curly\' THEN \'Texel\'
WHEN \'rosettes\' THEN \'Abyssinian\'
END;
DBMS_OUTPUT.put_line (\'Species=\' || l_guinea_pig_species);
END;
/
(C)
CREATE OR REPLACE PROCEDURE plch_proc (feature_in IN VARCHAR2)
IS
l_guinea_pig_species VARCHAR2 (100);
BEGIN
CASE feature_in
WHEN \'curly\'
THEN
l_guinea_pig_species := \'Texel\';
WHEN \'rosettes\'
THEN
l_guinea_pig_species := \'Abyssinian\';
ELSE
NULL;
END CASE;
DBMS_OUTPUT.put_line (\'Species=\' || l_guinea_pig_species);
END;
/
(D)
CREATE OR REPLACE PROCEDURE plch_proc (feature_in IN VARCHAR2)
IS
l_guinea_pig_species VARCHAR2 (100);
BEGIN
IF feature_in = \'curly\'
THEN
l_guinea_pig_species := \'Texel\';
ELSIF feature_in = \'rosettes\'
THEN
l_guinea_pig_species := \'Abyssinian\';
END IF;
DBMS_OUTPUT.put_line (\'Species=\' || l_guinea_pig_species);
END;
/
答案:
--BCD
注意CASE语句(statement)和CASE表达式(expression)在没有ELSE的情况下的区别
A是CASE语句,碰到没有处理的分支而又缺少ELSE子句就会报错:
"ORA-06592: CASE not found while executing CASE statement"
B用的是CASE表达式,在没有匹配的选项又没有ELSE的情况下返回NULL
C: 有 ELSE NULL 保护
D: IF 语句不会因为没有符合条件的条件值而报错
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26515977/viewspace-1207953/ ,如需转载,请注明出处,否则将追究法律责任。