就是说:
只要我加上任意一条EXEC SQL这样的语句,程序就不能正常循环生成文件了,一旦去掉就能正常生成。上面少打了一个字儿现象就是这样。

解决方案 »

  1.   

    应该不是只要去掉新加的EXEC SQL。。这种语句就能正常运行,我也觉得这种事儿很扯,但是他就这么发生了无语,
    我猜测是不是有个什么神秘的上限在起作用,但是一直没看到相关的资料。
      

  2.   

    打开子表cursor失败,这个时候oracle报什么错误?错误信息是什么?
    最好能贴上代码,你把代码精简到最小能引发错误的程度,这样就容易看出问题在哪里
    如果是打开的cursor太多的话,你可以试上加上
    maxopencursors=50
    这样,这个加在proc后面就可以了
      

  3.   

    我不是很清楚你原来的程序是怎么操纵数据库的,也是适用PRO*C吗?还是使用的地方式,比如ODBC
    能不能在EXEC SQL 之后,显示sqlca.sqlcode看一下错误原因呢?
    你的代码中,类似于:
    EXEC SQL WHENEVER SQLERROR 这一句,以及
    EXEC SQL NOT FOUND ...
    有没有?是什么样的?
      

  4.   

    应该不是打开cursor太多报错。虽然它报的是打开cursor失败,
    可是实际上第一次的循环,打开第二层的cursor就没有失败,然后这个第二次的curor我关闭了,进入第二次循环的时候会重新打开。可以说在没加入我说的EXEC ....语句之前这个程序一直跑的 好好的。
    我现在怀疑是栈溢出但是我把其中主循环的程序里面定义的局部变量数组长度各减少一半,依然无用。我打算随便建个一般的函数,加进来,看会不会报错。
      

  5.   

    是直接使用的PRO*C.源代码是.pc这种。用sqlca.sqlcode显示错误原因为:
    打开cur_data_3游标出错.-1001 [ORA-01001: invalid cursor                                             ]!
      

  6.   

    随便弄个什么函数不会有问题。同时,今天验证过不是栈溢出。
    我又猜,一个可能的原因是一个连接到一个断开之间资源有限。计划把这个EXEC SQL语句放到 新的连接,然后断开之间。然后再重新连接+原来的程序,太妖怪了。如果后面我不再回帖,那就是这个原因了,马克。