题目:
世界上有很多不同品种的豚鼠,其中有一些具有可以识别的特征。比如:“埃塞俄比亚人(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 语句不会因为没有符合条件的条件值而报错