4

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 循环中引发访问冲突。

在此先感谢,我们需要找到可以查明的东西,以便我们可以避开。

4

1 回答 1

0

我根本不精通 Oracle SQL,但是由于您正在维护它,我会看看是否可以将带有所有参数的调用更改为单个插入到新的专用表中(有那么多列加上一个自动编号主键),并更改存储过程以将此键作为输入并调用此新记录中的值来完成其工作。这可能只是比找出最大参数数量并尝试在那里找到修复快一点。(虽然这个数字有点奇怪,不是 2 的幂,它很可能是 291……)

于 2012-07-27T20:39:28.310 回答