条件控制

来源:互联网 发布:初学者吉他知乎 编辑:程序博客网 时间:2024/05/16 02:06

条件控制:

If语句:

--条件控制之if语句

--使用条件控制,可以基于某种条件来控制程序的执行流

--PL/SQL有3种类型的条件控制: IF、ELSIF和CASE语句

--IF语句有两种形式:

--1)IF-THEN语句是最基本的条件控制形式,其语法结构如下所示:

IF  condition  THEN 

  STATEMENT 1; 

  ……

  STATEMENT n;

END IF; (END和IF之间有一个空格)

 

--示例1:两个数字值存储在变量v_num1和v_num2中,

--如果v_num1大于v_num2,则交换两个数字并把它们

--在屏幕上打印出来

declare

  v_num1 number := 5;

  v_num2 number := 3;

  v_temp number; --该变量用于在交换过程中临时保存某个变量的值

begin

  --条件判断

  if v_num1 > v_num2 then

    --交换

    v_temp := v_num1;

    v_num1 := v_num2;

    v_num2 := v_temp;

  end if;  

 

  --打印

  dbms_output.put_line('交换之后:');

 dbms_output.put_line('v_num1='||v_num1);

 dbms_output.put_line('v_num2='||v_num2);

end;

IF-THEN-ELSE语句

--2)使用IF-THEN-ELSE语句,可以指定两组语句

--语法如下: 

IF condition THEN 

   STATEMENT 1; 

ELSE 

   STATEMENT 2; 

END IF; 

STATEMENT 3;

--示例2:判断用户提供的数字是否为偶数并打印结果

declare

  v_num number := &sv_num;

begin

  --判断

  if mod(v_num,2) = 0 then

     dbms_output.put_line('偶数');

  else

     dbms_output.put_line('奇数');  

  end if;    

end;  

 

 

--NULL条件   

--在某些情况下,IF语句中所使用的条件的计算值

--可能是NULL,而不是TRUE或者FALSE。

 

--对于IF-THEN结构,如果相关的条件计算值为NULL,

--则不执行指定的语句,会继续执行END IF之后的

--第1条可执行语句。

 

--对于IF-THEN-ELSE语句,当相关的条件计算值为NULL时,

--会执行保留字ELSE所指定的语句 

 

--示例3:IF条件的计算结果是NULL

declare

  v_num1 number := 0;

  v_num2 number; --默认值为null

begin

  if v_num1 = v_num2 then

    dbms_output.put_line('v_num1 =v_num2');   

  else

    dbms_output.put_line('v_num1 !=v_num2');  

  end if;   

end;  

 

 

--示例4:使用IF-THEN语句来测试用户所提供的日期是

--否是星期六或者星期天

declare

  v_date date :=to_date('&sv_date','yyyy-mm-dd');

  v_day varchar2(9);--保存某一天的名字

begin

  --得到特定日期代表的那一天的名字

  v_day := rtrim(to_char(v_date,'DAY')); 

  --测试v_day的值

  --dbms_output.put_line(v_day); 

 

  --测试是否为周六日

  if v_day in ('星期六','星期日') then

    dbms_output.put_line('周末'); 

  end if;

 

  dbms_output.put_line('Done...'); 

end;

  

 

--ELSIF语句的结构如下所示:

IF  condition 1  THEN 

  STATEMENT 1; 

ELSIF condition 2  THEN    --注意ELSIF中只有1个E

  STATEMENT 2; 

ELSIF  condition 3  THEN 

  STATEMENT 3; 

  ……

[ ELSE ] 

  [ STATEMENT N ];

END IF;

 

--elsif语句用来提供3个以上的执行分支

--示例6:判断用户输入的数字是0、正数还是负数

declare

  v_num number := &sv_num;

begin

  --判断

  if v_num < 0 then

    dbms_output.put_line('负数');

  elsif v_num = 0 then

    dbms_output.put_line('0');   

  else

    dbms_output.put_line('正数');

  end if;

end;

 

 

嵌套的if语句

--各种形式的if语句可以互相嵌套使用,没有任何限制

 

--所谓嵌套的if,就是指在一个条件判断分支的内部,如果

--需要,可以再开一个条件判断

 

--示例9:使用-4和3进行测试

declare

  v_num1 binary_integer := &sv_num1;

  v_num2 binary_integer := &sv_num2;

  v_total binary_integer;

begin

  --如果第一个数大于第二个

  if v_num1 > v_num2 then

    dbms_output.put_line('现在在外部if的if部分');  

    v_total := v_num1 - v_num2;

  else

    dbms_output.put_line('现在在外部if的esle部分');  

    v_total := v_num1 + v_num2; 

    

    --判断和值是否为负的

    if v_total < 0 then

      dbms_output.put_line('现在在内部if的if部分');  

      v_total := v_total*(-1);

    end if;

    

  end if;  

  

 dbms_output.put_line('v_total='||v_total);  

  

end;

 

case语句

--条件控制之case语句

 

--case语句完成和if同样的工作,都是进行条件判断

 

--CASE语句存在两种形式: simple CASE和搜索式CASE 

--Simple CASE语句具有如下结构: 

CASE  selector 

      WHEN expression_1 THEN  statement 1; 

      WHEN expression_2 THEN  statement 2; 

      ……

      WHEN expression_n THEN statement n; 

      ELSE  statementn+1; 

END CASE;

    

--示例1:使用simple  CASE语句判断用户输入的数字

--是否为偶数

declare

  v_num number := &sv_num;

  v_flag number;

begin

  --得到数的除2余数

  v_flag := mod(v_num,2);  

 

  --判断

  case v_flag

    when 0 then

      dbms_output.put_line('偶数');

    else

      dbms_output.put_line('奇数'); 

  end case;

  

  dbms_output.put_line('Done...');

end;

 

 

--2搜索式CASE语句的语法如下所示: 

CASE 

     WHEN search condition_1 THEN  statement 1; 

     WHEN search condition_2 THEN  statement 2; 

     WHEN search condition_n THEN  statement n; 

     [ELSE statementn+1]; 

END CASE;

 

  

--示例2:使用搜索式CASE语句改造上例

declare

  v_num number := &sv_num;

  --v_flag number;

begin

  --得到数的除2余数

  --v_flag := mod(v_num,2);  

 

  --判断

  case 

    when mod(v_num,2)=0 then

      dbms_output.put_line('偶数');

    else

      dbms_output.put_line('奇数'); 

  end case;

  

  dbms_output.put_line('Done...');

end;

 

--两种case语句的比较

--1、语法上:

--1)简单case有选择器变量,而搜索式case没有

--2)简单case的when后面是一个值,而搜索式case的

--when后面是一个布尔表达式

 

--2、使用上

--1)搜索式case的比较过程很直观,直接在代码上可以看出来,

--而简单case的比较过程在代码上是看不出来的

--2)搜索式case代码更加简洁,可以节省变量的使用

 

 

 

--示例3:使用simple  CASE表达式判断用户输入的数字

--是否为偶数

declare

  v_num    number :=&sv_num;

  v_flag   number;

  v_result varchar2(20);

begin

  --得到数的除2余数

  v_flag := mod(v_num, 2);

 

  --

  v_result := case v_flag

               when 0 then

                '偶数'

               else

                '奇数'

             end;

 

  dbms_output.put_line(v_result);

end;

 

0 0
原创粉丝点击