程序描述如下:
  1 在父进程中创建了一个DB连接,
  2 把父进程的连接传给子进程(fork())使用,子进程执行select * from 查询(preparestatement 游标),然后取得查询后的结果集(resultset 结果集),
  3 子进程 free或delete掉游标和结果集(preparestatment和resultset),并exit(0);
 
  4 父进程的DB连接不释放,不重新连接,继续给另一个子进程使用(子进程的动作一致),遇到问题描述:
  
  在子进程结束后(exit(0)),游标却释放不掉,一直在数据库中(select * from v$session)请各位帮忙解决一下。多谢!

解决方案 »

  1.   

    将你preparestatement游标关闭就行了 preparestatement pstm.close ;
      

  2.   

    close了,delete了,free了,都没用。游标还保持在数据库中。
      

  3.   

    程序伪代码:int main()
    {
       connection *p = new oracleconnection();  while(1)
     {
       if(fork()==0)//子进程
      {
        preparestatment *pstat = null;
           resultset *pret = NULL;
           
          try{
               pret = pstat = p->preparesql("select * from ,,,");
      //设置了标志位,当p未被使用时,才执行
         }
         catch(){....}
         
         pstat->close();
         pret->close();    exit(0);//子进程结束
        }//if(fork()...
      }//while
    }//函数结束所遇到的问题是,子进程中游标一直无法关闭,select count(*) from v$open_cursor where sql_text like '%select 查询语句%';一直在增加。
    过一段时间,程序报1000错误(打开的最大游标数,,,,)请高手帮忙解决。