代码之家  ›  专栏  ›  技术社区  ›  ALOToverflow

C和PLSQL光标

  •  0
  • ALOToverflow  · 技术社区  · 16 年前

    我有一个这样的PL/SQL过程签名

    foo(param1 IN type1, param2 IN type1, c OUT REF CURSOR) .

    正在C中调用此存储过程。在C代码中,我用这个光标填充一个数据表。我想知道光标何时关闭。

    我应该在SP中关闭它吗?在代码中?或者当我调用Dispose方法(因为它没有Close方法)时,对象或ClerefCursor将关闭它?

    谢谢

    编辑:下面是一些我正在使用的代码示例

    存储进程:

    create or replace procedure foo1(param1 IN type1, param2 IN type1, c OUT REF CURSOR)
    IS
    BEGIN
        OPEN c
        FOR
           SELECT x
           FROM table;
    END;
    
    create or replace procedure foo2(param3 IN type1, param4 IN type1, c OUT REF CURSOR)
    IS
       temp type1 := param3;
       x type1;
    BEGIN
       LOOP temp < param4
          foo1(temp, param4, c);
          FETCH c INTO x;
          temp := temp +1;
       END LOOP;
    END;
    

    谢谢

    1 回复  |  直到 16 年前
        1
  •  0
  •   Yevhen    16 年前

    您不应该关闭光标,因为不会返回任何数据,您必须在C代码中关闭它。