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)

猜你喜欢

转载自www.cnblogs.com/huiya/p/9258473.html
今日推荐