説明
%FIND 述語では、valueset に指定された値と一致するデータ値を選択し、一連のビットマップ・チャンク内の値を反復処理することで、結果セットをフィルタ処理できます。この一致は、scalar-expression の値が valueset 内の値と一致したときに成功します。valueset の値がスカラ式のいずれの値とも一致しない場合、%FIND は NULL 文字列を返します。表示モードに関係なく、この照合は常に、論理 (内部保存) データ値に対して実行されます。
%FIND は、他の比較条件と同様に、SELECT 文の WHERE 節または HAVING 節の中で使用します。
%FIND では、抽象的な、プログラムで指定された一致する値のセットを使用して、フィールド値をフィルタ処理できます。具体的には、抽象的な、プログラムで指定されたビットマップを使用して、RowId フィールドの値をフィルタ処理できます。その場合、valueset はビットマップ・インデックスの添え字の層と同じように機能します。
このユーザ定義クラスは、抽象クラス %SQL.AbstractFindOpens in a new tab から派生します。この抽象クラスには、ContainsItem()Opens in a new tab ブーリアン・メソッドが定義されています。ContainsItem() メソッドは、scalar-expression の値を valueset の値とマッチングします。
一連のビットマップ・チャンク内の値に対する反復処理は、以下の 3 つのメソッドを使用して実行されます。
これらの 4 つのメソッドの詳細は、%SQL.AbstractFindOpens in a new tab を参照してください。
SIZE 節
オプションの %FIND SIZE 節には整数 nn が提供され、これによって valueset 内の値の桁数が指定されます。InterSystems IRIS はこの桁数を使用して、最適なクエリ・プランを決定します。nn は、10、100、1000、10000、その他のいずれかのリテラルで指定します。nn は、コンパイル時に定数値として使用可能であることが要求されるため、すべての SQL コードでリテラルとして指定する必要があります。埋め込み SQL を除くすべての SQL で、示されるように入れ子の括弧を指定する必要があります。
%FIND と %INSET の比較
-
%INSET は、最も単純で最も一般的なインタフェースです。ContainsItem() メソッドをサポートします。
-
%FIND は、ビットマップ・インデックスを使ったビットマップ・チャンクの反復処理をサポートします。ObjectScript の $ORDER 関数の機能をエミュレートし、NextChunk()、PreviousChunk()、GetChunk() の各反復処理メソッドと、ContainsItem() メソッドをサポートします。
-