日期:2014-05-17  浏览次数:20768 次

关于PRO*C一个见鬼的问题
问题是这样的,我有一个能正常运行的程序,功能是从主表读一条数据,然后子表有2-10条匹配的数据,组成一个文件,一直循环直到将主表里的数据读完。

这程序能正常运行。

后来我在这个循环前面能前面加了一个含有EXEC SQL。。。这样语句的函数,这个函数用来读取一个参数控制,跟循环生成文件完全没任何关系。

这时见鬼奇怪的事情发生了:本来能正常循环出文件的程序,只能生成一个文件,然后会报打开子表cursor失败。

后来我试着去掉此函数,随便在前面加一个EXEC SQL。。。类似的语句,依然报同样的错误。

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


我试过将程序拆成几个.PC文件,或者将另一个函数编译成.so然后调用,但是问题依然。

求高手指点思路。
------解决方案--------------------
是不是因为结果集中的影响行数引起的。
------解决方案--------------------
打开子表cursor失败,这个时候oracle报什么错误?错误信息是什么?
最好能贴上代码,你把代码精简到最小能引发错误的程度,这样就容易看出问题在哪里
如果是打开的cursor太多的话,你可以试上加上
maxopencursors=50
这样,这个加在proc后面就可以了

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