设为首页 收藏本站
查看: 1030|回复: 0

[经验分享] ORACLE PL/SQL练习(三)

[复制链接]
发表于 2018-9-10 10:23:07 | 显示全部楼层 |阅读模式
  布尔直接量
  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 AND 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;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-570815-1-1.html 上篇帖子: Linux下静默安装Oracle 11g 下篇帖子: ORACLE PL/SQL练习(四)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表