4

TStoredProc ExecProc 呼び出しで、パラメーターの数またはパラメーターの全体的なサイズに制限はありますか?

現在、BDE を使用して Oracle に接続しているシステムを実行しており、パッケージ プロシージャへのパラメータ数が最近変更されたため、アクセス違反が発生し始めました。params カウントは最大 291 になり、AV は TStoredProc の ExecProc 呼び出しで作成されます。

リストから単一のパラメーターを削除すると (任意のパラメーター、特定のパラメーターである必要はありません)、ExecProc 呼び出しは正常に機能します。

コードをデバッグしたところ、DBTables.pas 内の TStoredProc.BindParams プロシージャでアクセス違反がスローされています。私はいくつかのウォッチを設定しています。そのうちの 1 つは 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 に答える