您的位置:首页 > 其它

条件控制

2015-11-21 16:35 337 查看

条件控制:

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: