oracle pl/sql case,ORACLE PL/SQL练习(三)

布尔直接量

DECLARE

enough_money BOOLEAN;         -- 声明一个布尔类型变量

BEGIN

enough_money := FALSE;     -- 给这个变量赋值

END;

检查布尔表达式的值无需引用这些直接量,只让表达式自己说就可以了。

DECLARE

enough_money BOOLEAN;

BEGIN

IF enough_money

THEN

... ...

IF语句有三种使用方法:IF类型特点

IF THEN END IF;最简单的用法,IF和THEN之间的条件决定了THEN和END IF之间的一系列语句是否会被执行,如果条件部分的求值结果是FALSE或NULL,这些代码就不会执行。

IF THEN ELSE END IF;实现了二选一的逻辑。根据对位于IF和THEN之间的条件的求值结果,或者是THEN和ELSE之间的代码被执行,或者是ELSE和END IF之间的代码被执行。总之,这两部分代码肯定有一个会被执行。

IF THEN ELSIF ELSE END IF;最复杂的形式。IF语句会从一系列互斥条件中选择一个是TRUE,然后执行该条件关联的语句。ORACLE 9iR1之后,建议用CASE替代。

短路求值:

PL/SQL使用短路求值方法,也就是说PL/SQL不需要对一个IF语句中的所有表达式都去求值。

将代价昂贵的条件放在整个条件集的最后

IF low_CPU_condition AND high_CPU_condition

THEN

...

END IF;

嵌套IF语句也能实现短路求值一样的效果

IF low_CPU_condition

THEN

IF high_CPU_condition

THEN

...

END IF;

END IF;

只有在low_CPU_condition是TRUE的前提下,high_CPU_condition才会被求值,同样实现了短路效果。

CASE语句和表达式

区别:CASE表达式的结果就是一个值,CASE语句的结果是执行一系列的PL/SQL语句。

简单CASE语句:通过值来关联一个或多个PL/SQL语句,根据表达式的返回值来选择哪一个语句会被执行。

搜索形式的CASE语句:根据一系列布尔条件来确定要执行的PL/SQL语句系列。那些和第一个求值结果是TRUE的

条件相关联的语句会被执行。

简单CASE语句

CASE employee_type

WHEN 'S' THEN

award_salary_bonus(employee_id);

WHEN 'H' THEN

award_hourly_bonus(employee_id);

WHEN 'C' THEN

award_commissioned_bonus(employee_id);

ELSE                                        -- ELSE子句是可选的

RAISE invalid_employee_type;

END CASE;

如果没有明确指定ELSE子句,PL/SQL会隐含的使用下面的方法。

ELSE

RAISE CASE_NOT_FOUND;

即如果没有明确地使用ELSE子句,而且有没有WHEN子句能够匹配CASE表达式的结果,PL/SQL就会抛出一个

CASE_NOT_FOUND的错误。

用CASE语句来实现津贴发放逻辑

CASE TRUE

WHEN salary >= 10000 AND salary <= 20000

THEN

give_bonus(employee_id,1500);

WHEN salary > 20000 AND salary <= 40000

THEN

give_bonus(employee_id,1000);

WHEN salary > 40000

THEN

give_bonus(employee_id,500);

ELSE

give_bonus(employee_id,0);

END CASE;

为了避免出现CASE_NOT_FOUND错误,一定要确保至少有一个条件会满足。

CASE语句的规则:

①一旦某些语句被执行,整个执行也就结束了。即便有多个表达式结果都是TRUE,也只有和第一个表达式相关连的语句会被执行;

②ELSE语句是可选的,如果没有指定ELSE,并且没有一个表达式的求值结果是TRUE,就会抛出CASE_NOT_FOUND异常。

③WHEN表达式是按照从上到下的次序依次求值。

CASE表达式

分两种:

简单CASE表达式

搜索形式CASE表达式

NULL语句

有时希望PL/SQL不要做任何事

格式:

NULL;

场景:

1.增加程序可读性:

IF :report_mgr.selection = 'DETAIL'

THEN

exec_detail_report

ELSE

NULL;    -- Do nothing

END IF;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值