oracle学习-PL SQL 存储过程中循环触发器
Posted 新愚俗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle学习-PL SQL 存储过程中循环触发器相关的知识,希望对你有一定的参考价值。
PL SPL 提供了3中不同类型的循环结构
-- 实例:索引 loop_counter从1开始,到10 结束,循环共执行10次 FOR loop_counter IN 1 .. 10 LOOP ...可执行语句... END LOOP; -- 索引loop_counter从10开始,到1结束,循环共执行10次; FOR loop_counter IN REVERSE 1 .. 10 LOOP ...可执行语句... END LOOP; -- 循环的执行范围取决于变量或者表达式的值: FOR calc_index IN start_period_number .. LEAST(end_period_number, current_period) LOOP ...可执行语句... END LOOP; --在这个例子中,循环的执行次数是在运行时候决定的。边界值只会在循环开始之前被求值一次,然后在整个循环生命期内都有效。
- 简单循环或者无限循环
- FOR循环(数值循环和游标循环)
- WHILE循环
简单循环:LOOP关键字开始,以END LOOP语句结束,要靠循环体内的EXIT、EXIT WHEN 或者 RETURN来退出循环(或者异常抛出)
【EXIT WHEN后面跟布尔表达式,没有退出条件的话,就会变成无穷循环】
FOR循环:要使用数值型FOR循环,需要指定循环开始的整数值和结束整数值,PL/SQL会完成剩下的工作,迭代每一个中间取值,然后结束循环;
【需要最少量的代码、预先知道循环体需要执行的固定次数,这个范围在FOR和LOOP两个关键字之间已经给出了。 如果只想有限次数的执行一段代码,又不想过早的结束循环,就可以使用数值型的FOR循环】
游标型的FOR循环使用相同的基本结构,但需要提供一个明确的游标或者SELECT语句,而不是数值型FOR循环使用的整数的上下边界。
【如果你需要取出游标的每条记录依次处理,就可以使用游标FOR循环】
WHILE循环:WHILE循环和简单循环非常相似,一个关键的区别在于WHILE循环会在每次循环之前检查是否满足终止条件。
【下列场合使用WHILE循环: a.你事先无法确定会循环多少次;b.你想通过条件来终止循环;c.循环体不是必须要执行的】
每个结构包括两部分:循环边界和循环体。
关于简单循环中,什么时候用EXIT WHEN,什么时候使用拆分的EXIT:
1.如果只有一个条件表达式决定循环是否应该结束,这种情况下使用EXIT WHEN 最好
2.如果有多个退出条件,或者要根据不同的退出条语句件设置“返回值”时,使用IF或者CASE应该更合适,在这些语句的一个或多个子句中使用EXIT语句。
【REPEAT UNTIL】 PL SQL没有
在循环中,可以适当暂停(休眠) DBMS_LOCK.sleep(10); -- 10秒钟内不做任何事情
PL SQL并没有提供可以指定特殊的累进步幅得“步进”的语法。在PL SQL的数值型FOR循环的各种变体中,递进的步幅总是以1为单位前进或者后退。
如果希望一个循环体能够以一种非平凡方式递进(即增长步幅不是1),你必须写一些聪明的代码,这里以简单例子: 在循环中使用简单的乘法,递归次数只需要一半:(不太会)
FOR even_number IN 1 .. 50 LOOP calc_values(even_number*2); END LOOP;
循环的标签:可以通过标签给一个循环命名,格式: <<label_name>> ,循环的标签要紧靠在LOOP语句前面
<<all_emps>> FOR emp_rec IN emp_cur LOOP ... END LOOP; -- 标签也可以跟在END LOOP保留词的后面,这是可选的 <<year_loop>> WHILE year_number <= 1995 LOOP <<month_loop>> FOR month_number IN 1 .. 12 LOOP ... END LOOP month_loop; year_number := year_number + 1; END LOOP year_loop;
CONTINUE:使用这个语句可以从循环的本次迭代退出,紧接着立即进入下一次迭代。(无条件的CONTINUE和有条件的CONTINUE WHEN)
以上是关于oracle学习-PL SQL 存储过程中循环触发器的主要内容,如果未能解决你的问题,请参考以下文章
oracle(sql)基础篇系列——PLSQL游标存储过程触发器
Oracle 12 PL/SQL 在触发器中检索存储过程名称
Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器