PL/SQL每日一题:CASE语句和CASE表达式的区别

来源:互联网 发布:网络监测基础与实战 编辑:程序博客网 时间:2024/05/15 01:06

      题目
      
       世界上有很多不同品种的豚鼠,其中有一些具有可以识别的特征。比如:“埃塞俄比亚人(Abyssinians)”外皮上具有带褶皱的花环
       “特塞尔绵羊(Texels)”有长长的卷毛。而“克雷斯特白豚鼠White Crested Guinea Pig”在头上一个白色的花纹(不出所料)
      
       下列的每个选项提供了plch_proc过程的一种实现方法,它会显示给定特征的豚鼠品种;这个过程并不完备
      
       哪些选项在执行下列的代码块之后会显示如下的两行?

Species=TexelSpecies=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 语句不会因为没有符合条件的条件值而报错