1

記述子にSQLSET型を挿入する方法は?

まず、バインド変数を使用してカーソルを準備して宣言します。

select * from account where aco_no in ( ? ) and ..;

私の目標は、「?」を置き換えることです。アカウントのリスト(「123」、「234」)を含む開いているカーソル。ステートメントのカーソルは一度準備され (サーバーの開始)、その後、異なるデータ (アカウント リストのサイズ) で数回開かれます (サービスの開始)。私の目標は、カーソルを IN() 演算子で準備し、アカウント リストをバインド変数として渡すことです。

オープンはステートメントによるものです:

$OPEN :cur USING SQL DESCRIPTOR :descWhere;

descWhere は、サービスによって作成された記述子です (set descriptor ステートメント)。

単純な型 (SQLCHAR itp.) を使用している場合はうまく機能します。

$SET DESCRIPTOR :desc VALUE :size
            TYPE = :type,
            LENGTH = :NO_LEN;
$SET DESCRIPTOR :desc VALUE :size
                DATA = :szBuffor;

記述子タイプ SQLSET、SQLLIST、.. に挿入する方法、およびそれが実行できる場合は、IN() 演算子で動作しますか?

4

1 に答える 1

0

私の意見では、あなたの状況で記述子を使用するのは間違いです。記述子は、コードを記述するときにステートメントがわからない場合に使用する必要があるメカニズムです。たとえば、どのタイプのデータを選択するかわからない場合などです。

あなたの場合、実行時にステートメントを通常の動的 SQL ステートメントとして宣言し、開いて実行するだけです。通常、カーソルを宣言しても、(select のコストと比較して) パフォーマンスがそれほど向上しません。選択のパフォーマンスがさらに必要な場合は、カーソルを使用する代わりに配列フェッチをチェックすることをお勧めします。

とにかく、カーソルを使用したい場合は、使用可能なメモリを超えないように、CLOSE カーソルと FREE 記述ステートメントを忘れないでください。

パフォーマンスのチューニングについては、この記事も確認してください。

于 2016-06-30T11:21:45.440 に答える