一:Oracle流程控制

标题一:IF…THEN

标题二:IF…THEN…ELSE

标题三:IF…THEN…ELSEIF

标题四:CASE WHEN…THEN…ELSE…END CASE

标题五:CASE…WHEN…THEN…ELSE…END CASE

标题六:LOOP

6.1 loop

loop…end loop

6.2 exit语句必须放在循环内,return语句可以在正常到达程序结尾之前而终止执行
loop
...
if...then
...
exit;
end exit;
end loop;
6.3exit…when
loop
fetch c1     --就是把游标的值取出来,放到指定变量中
into...
exit when c1%notfound;
...
end loop;
close c1;

6.4循环标签 <>
<<name>>
loop
...

end loop name;  --这里name可写可不写

使用标签退出循环

<<name>>
loop
...
   loop
...
     exit name when ...    --退出外部循环name,则嵌套的内部循环也退出
end loop;
end loop name;
6.5While…Loop
while boolean   --避免死循环
 loop

 ...

 end loop;
6.6For…loop

注意: 可以使用(…)两个点号界定范围
注意: 这里 i 就是循环计数器,不能在后面通过 i := 6 方式进行重新赋值

for i in 1..3 loop   --i在1,2,3依次循环执行loop语句
...

end loop;

for i in reverse 1..3 loop   --i在 3,2,1依次执行loop
...
end loop;
6.6.1循环范围

注意:1.循环范围的边界可以是文字,变量或表达式,但是都必须是数字,否则异常,下界不一定是1,但是循环计数器只能每次+1,
2. 没有step语法指定循环增量,但是可以通过在for循环内部扩大循环计数器的倍数来实现

注意:1.数值溢出,因为 integer类型在 -231~231 , 在plsql内部把边界赋值给一个临时的pls_integer变量,而pls_integer的范围就是-231~231 , 如果使用的循环范围超过则会报错
例如: for i in 1…2**32 loop…就会报错

6.6.2动态范围

循环的上界未知,通过其他方式获取

注意: 如果循环的下界超过上界就会不被执行loop

6.6.3作用域规则

循环计数器只在循环内部定义,不能在循环外部引用,循环退出后,循环计数器就会失效,

注意:
1.循环计数器隐式声明为integer,所以无需显示声明.另外本地声明会覆盖全局声明
2.如果想要引用全局变量,需要使用标签<<名称>>

<<topic>>
declare
 i integer
...

begin
...
for i 1..10 loop
...
if topic.i > 10 then   --引用全局变量
...
end if;
end loop;
end topic;
6.6.4使用exit语句
<<topic>>
for i 1..10 loop
...
for j 1..5 loop
 fetch c into tmp_rec;
 exit topic when c%notfound;
...
end loop;
end loop topic;

7.GOTO语句

作用:无条件跳到一个标签处
前提:该标签是全局唯一

begin
...
GOTO topic;
...
<<topic>>
insert into tmp values...
end;

注意:
1.goto不能跳入if语句
2.goto不能else语句
3.goto不能从case 的一个when子句跳入另一个when子句
4.goto不能从封闭的块跳入它的子块
5.goto不能跳出子程序
6.goto不能从异常控制部分跳入当前块
7.但是: goto可以从一个异常控制程序中跳转到一个封闭块

8.NULL语句

null语句本身什么也不做,只是简单的把控制权交给下一个语句而已

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值