在TStoredProc ExecProc调用中,params的数量或params的总体大小是否有限制?
目前正在运行仍在使用BDE连接到Oracle的系统以及最近对包过程的参数数量的更改,因为它已开始产生访问冲突。 params计数现在高达291,AV正在TStoredProc的ExecProc调用中创建。
如果我们从列表中删除单个param(任何param,不必是特定的param),ExecProc调用就可以正常工作。
我已经通过代码进行了调试,并且在DBTables.pas中使用TStoredProc.BindParams过程抛出了访问冲突。我设置了几个手表,其中一个是SizeOf(FRecordBuffer),当我单步执行此过程时,值为65535.这是MaxWord(Windows.pas)。我没有看到DBTables代码中有任何指定的限制。
callstack是TStoredProd.ExecProc - > TStoredProc.CreateCursor - > TStoredProc.GetCursor - > TStoredProc.BindParams和遍历FParams的for循环中抛出了访问冲突。
在此先感谢,我们需要找到一些我们可以找到的东西,以便我们能够明确指出。
答案 0 :(得分:0)
我完全不熟悉Oracle SQL,但是既然你正在维护这个东西,我会看看是否可以将所有参数的调用更改为单个插入到新的专用表中(包含那么多列)加上一个自动编号主键),并更改存储过程以将此键作为输入,并调用此新记录中的值来完成其工作。这可能比找出最大参数数量并尝试在那里找到修复程序要快一点。 (虽然这是一个奇怪的数字,因为不是2的幂,它可能是291 ...)