PL/SQL中FOR循环内0..NUM_OF_DAYS的0与0..含义是什么?
PL/SQL 数值型FOR循环语法解析
针对代码段 FOR X IN 0.. NUM_OF_DAYS LOOP 里大家经常困惑的两个语法细节,具体说明如下:
0 的实际含义
- 这个
0是当前数值循环的遍历区间起始值,会在循环启动时自动赋值给循环计数器变量X。 - PL/SQL的数值FOR循环不需要手动提前声明循环变量
X,也不需要手动给它赋初始值,这些操作都是语法层面自动完成的。 - 举个实际跑数的例子:如果变量
NUM_OF_DAYS的值为5,循环启动后X的第一次取值就是0,后续依次取1、2、3、4、5,每匹配一个取值就执行一次循环体内部的逻辑。 - 要注意:这个起始值必须是确定的整数类型,不能是可空变量——如果引用的变量值为空,触发循环时会直接抛出PL/SQL预定义异常,不少刚接触PL/SQL的开发者都踩过这个坑。
.. 语法标识的作用
..是PL/SQL中专用于定义连续整数闭区间的语法分隔符,和它左右两侧的数值搭配,就构成了数值FOR循环需要遍历的完整整数范围。- 不带反向关键字的默认遍历规则:
- 固定以步长1从区间左侧值向右侧值递增遍历,从
..左边的起始值开始,每次给循环计数器加1,直到取值达到..右侧的结束值、执行完最后一次循环体后自动退出循环。 - 如果
..右侧的结束值小于左侧的起始值(比如写为FOR X IN 3..1 LOOP),循环体不会执行,PL/SQL不会抛出语法错误。
- 固定以步长1从区间左侧值向右侧值递增遍历,从
- 如果需要反向遍历,只需要在区间前加
REVERSE关键字,比如FOR X IN REVERSE 0..NUM_OF_DAYS LOOP,此时循环会从NUM_OF_DAYS的取值开始,每次减1,直到取值降到0为止。
补充提示:这类数值循环的计数器变量
X是循环块内部的局部变量,作用域仅在循环体范围内,循环退出后就会被销毁。哪怕在循环外部提前声明了同名变量,循环内部的逻辑也不会影响外部变量的值。
内容的提问来源于stack exchange,提问作者Gihan
相关产品推荐
相关产品推荐

