代码之家  ›  专栏  ›  技术社区  ›  F.donoso

嵌套的隐式游标未在数据中清除

  •  1
  • F.donoso  · 技术社区  · 6 年前

    我有一个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 但我想这不是我的想法。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bob Jarvis - Слава Україні    6 年前

    我一直使用游标来循环,从未见过您描述的情况。我唯一能想到的是你有一个变量 secuence 在程序中的其他地方声明,且恰好设置为1。在这种情况下,PL/SQL编译器可能会选择使用全局变量 副词 而不是循环控制变量 副词 生成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;
    

    打开一个游标通常比打开三个游标成本更低。

    祝你好运。