我有一个oracle pl / sql匿名块,在for循环中有一个隐式游标,以这种方式嵌套在for循环中:
FOR secuence IN 1..3 LOOP
FOR registro_notificacion IN (
SELECT 'data' FROM my_table WHERE my_table.column1=secuence)
LOOP
--work with data
END LOOP; END LOOP;
当我在secuence=1
上返回值并且其他值为空时会出现问题,因为由于某种原因隐式游标本身不是clean
。
因此,在secuence=2
我不习惯,因为没有数据,但由于某种原因,它仍然在第一个循环(secuence=1)
上返回数据。
我应该在每次迭代结束时声明和显式游标关闭吗?虽然我考虑使用3 for for循环,每个secuence
值一个,但这不是我猜的想法。
答案 0 :(得分:1)
我一直使用游标for循环,从未见过你描述的情况。我唯一能想到的是你在程序中的其他地方声明了一个名为secuence
的变量,恰好设置为1.在这种情况下,PL / SQL编译器可能会选择使用全局变量{{ 1}}而不是生成SQL语句时的循环控制变量secuence
。一个好的经验法则是为每个循环控制变量使用唯一的名称。
但是,您可以使用以下方法完全摆脱secuence
循环:
FOR secuence...
打开一个光标通常比打开三个光标要便宜。
祝你好运。