我有一个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,对每个secuence值使用一个,但这不是我认为的想法。
发布于 2018-05-18 18:22:30
我一直用光标做循环,从来没有见过你描述的情况.我唯一能想到的是,在程序的其他地方声明了一个名为secuence的变量,该变量恰好设置为1。在这种情况下,PL/SQL编译器可能选择使用全局变量secuence而不是循环控制变量secuence来生成SQL语句。一个好的经验法则是为每个循环控制变量使用唯一的名称。
但是,您可以使用以下方法完全摆脱FOR secuence...循环:
FOR registro_notificacion IN (SELECT 'data'
FROM my_table
WHERE my_table.column1 BETWEEN 1 AND 3
ORDER BY my_table.column1)
LOOP
--work with data
END LOOP;打开一个游标通常比打开三个游标要便宜。
祝你好运。
https://stackoverflow.com/questions/50416536
复制相似问题