gz,我也是这样的,只好一直用
try
{}
catch
{}
来减少错误
大家又没有好的办法啊?

解决方案 »

  1.   

    alter system flush shared_pool
      

  2.   

    alter system flush shared_pool 是刷新共享池,和关闭游标没有直接关系,而且这样浪费很多的资源
      

  3.   

    不知道大家有没有通过package的游标 来返回结果集? 我想的治本的办法是在游标使用完后关闭,就象普通的游标调用一样,但在此类返回结果集的游标中又不能关闭,因为还需要程序的调用来获取结果集,所以想知道有什么办法可在包中关闭此游标!?
      

  4.   

    在包中是使用的参考游标. 在调用的时候有:
    1.如果是手动打开的,要手动关闭. 
    open c;
    loop
      fetch ...
       ...
    end loop;
    close c;   <---手动关闭.,2.如果不是手动打开的
        for v_temp in c;
         ....
        end loop ;   <---就不用手动关闭了.
      

  5.   

    你试过吗?我都是Close并且Dispose了,还是这样的
      

  6.   

    我的packagebody中是这样的代码  type t_refCursor is ref cursor;
     function queryNotices() return t_refCursor as
        a1 t_refCursor;
     begin
      open a1 for
               select * from MyTalble
     return al;
    end queryNotices; 通过此来返回结果集(只是说明问题简化了获取结果集的复杂性和所需要的参数)
     这里Open 了游标
     但是马上就把它return了,在哪里可以把它关闭?
     而Java中的调用是通过通用连接池的,连接并非每次调用了就关闭(所以好像不能像楼上有同志说的那样简单的把连接给关闭了)而是返回pool中...
     因为我们用了自己编写的通用组件,系统中大量的使用了这样的结果集获取噢是,现在出现的错误我怀疑与此有关,怎么关闭?
      

  7.   

    open cursor;
    loop
       fetch cursor into varlist;
       process;
       exit when cursor%notfound;
    end loop
    close cursor
    exception when others 
       close cursor;
      

  8.   

    谢谢大家的参与,不过还是请大家看明白我的问题的描述,再重复一下:
    我的packagebody中是这样的代码  type t_refCursor is ref cursor;
     function queryNotices() return t_refCursor as
        a1 t_refCursor;
     begin
      open a1 for
               select * from MyTalble
     return al;
    end queryNotices; 通过此来返回结果集(只是说明问题简化了获取结果集的复杂性和所需要的参数)
     这里Open 了游标
     但是马上就把它return了,在哪里可以把它关闭?
     而Java中的调用是通过通用连接池的,连接并非每次调用了就关闭(所以好像不能像楼上有同志说的那样简单的把连接给关闭了)而是返回pool中...
     因为我们用了自己编写的通用组件,系统中大量的使用了这样的结果集获取噢是,现在出现的错误我怀疑与此有关,怎么关闭?
    ----------------------------------------------
    我的程序中大量使用此方法获取结果集,而程序经常出现
    “ORA-0100:超出打开游标的最大数”的错误,我怀疑和此调用有关,但我不想改变oracle的系统配置文件来实现,因为那治标不治本!