一:LOOP...END LOOP
先看代码
declare v_flag number := 1; begin loop exit when v_flag>16; v_flag := v_flag+1; dbms_output.put_line(to_char(v_flag)); end loop; end;
其中exit when是跳出循环的条件,
注意代码中的分号,挺重要的。没有分号会报错
二:while……loop….end loop
几个和循环结构相关的代码,我比较喜欢这个,如下:
declare v_flag number := 1; begin while v_flag<16 loop v_flag := v_flag+1; dbms_output.put_line(to_char(v_flag)); end loop; end;
注意这个示例程序和上个示例程序的输出结果是不同的
具体为什么不同我就不多解释了
三:for…loop…end loop
还是类似的示例程序:
declare v_flag number := 1; begin for v_flag in 2..16 loop --v_flag := v_flag+1; dbms_output.put_line(to_char(v_flag)); end loop; end;
注意我用--注释掉了一句
因为在这个循环体内,是不允许为哨兵变量赋值的
哨兵变量不知道啥意思?hehe
--是注释单行的写法
/* …..*/可以注释多行
四:顺序控制goto
看例子:
declare v_flag number := 1; begin while v_flag<16 loop v_flag := v_flag+1; dbms_output.put_line(to_char(v_flag)); if mod(v_flag,6) = 0 then goto lable_1; end if; end loop; <<lable_1>> dbms_output.put_line('跳出来了'); end;
mod(v,n)是取余数的意思,
这里写这个函数其实没意义
还不如直接判断变量是否等六
另外需要注意的是goto语句有很多限制
以下都是不被允许的:
1跳转到非执行语句前面
2跳转到子块中
3跳转到条件语句中
4跳转到循环语句中
5从条件语句的一部分跳转到另一部分
6从异常处理部分跳转到执行部分