TStoredProc ExecProc 调用中的参数数量或参数的总体大小是否有限制?
当前运行的系统仍然使用 BDE 连接到 Oracle,并且最近对包过程的参数数量进行了更改,开始产生访问冲突。参数计数现在达到 291,并且正在 TStoredProc 的 ExecProc 调用中创建 AV。
如果我们从列表中删除单个参数(任何参数,不必是特定参数),ExecProc 调用就可以正常工作。
我已经调试了代码,并且 DBTables.pas 中的 TStoredProc.BindParams 过程引发了访问冲突。我设置了多个监视,其中之一是 SizeOf(FRecordBuffer),当我逐步执行此过程时,该值是 65535。这是 MaxWord (Windows.pas)。我没有看到 DBTables 代码中有任何指定的限制。
调用堆栈为 TStoredProd.ExecProc -> TStoredProc.CreateCursor -> TStoredProc.GetCursor -> TStoredProc.BindParams,并且在迭代 FParams 的 for 循环中引发访问冲突。
提前致谢,我们需要找到一些可以精确定位的东西,以便我们能够避开。
最佳答案
我一点也不精通 Oracle SQL,但既然你正在维护这个东西,我会看看是否可以将带有所有参数的调用更改为单个插入到新的专用表(具有那么多列)加上自动编号主键),并更改存储过程以将此键作为输入并调用此新记录中的值来完成其工作。这可能比找出参数的最大数量并尝试在那里找到修复方法更快一些。 (虽然这个数字有点奇怪,因为不是 2 的幂,但很可能是 291...)
关于delphi - TStoredProc 中的参数数量有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11691774/