サーチバッファとバリューバッファは、次の定義を行うときに、対で使用します。
FIND コマンド(S1、S2、S4)でレコードの集合を選択するための検索条件
読み込みコマンド(L3/6、L9)が論理的な順次読み込みを行う範囲
サーチバッファを指定した場合、バリューバッファも指定されているものと見なされます。 バリューバッファが指定されていないと、サーチバッファとペアになるダミーのバリューバッファが作成されます。 それぞれのタイプの ABD またはバッファ間の関係については、「バッファタイプ間の関係」を参照してください。
単一の Adabas ダイレクトコールに指定可能なサーチバッファとバリューバッファのペアの数は 1 つだけです。
ユーザーは、サーチバッファに検索式を、バリューバッファには検索式に対応する値を指定します。
サーチバッファの構文は、使用する検索条件のタイプによって異なります。
単一ファイル検索。 この検索条件は、単一ファイル内の 1 つ以上のフィールドで構成されます。
物理的にカップリングされたファイルを使用した複数ファイル検索。 この検索条件は、ADAINV ユーティリティで物理的にカップリングされている 2 つ以上のファイルに含まれているフィールドで構成されます。
ソフトカップリング機能を使用した検索。 この機能は、検索、読み込み、内部リストのマッチングの組み合わせができます。
検索条件には、1 つ以上の非ディスクリプタを含めることができます。 非ディスクリプタを使用した場合、Adabas は実際に読み込みを行い、どのレコードをユーザーに返すかを判断します。
注意:
このセクションでは、サーチバッファの形式オプションの概要を示します。 各サーチバッファエントリはデリミタ(コンマ、スラッシュ、カッコ、セミコロン)で区切らなければなりません。 各エントリ間に 1 つ以上の空白があってもかまいません。 サーチバッファは、ピリオドで終了する必要があります。
このセクションでは、次のトピックについて説明します。
検索式はすべての検索タイプに共通です。
検索式は、フィールド名(field-name)とオプションのエントリまたはコマンド ID(command-id)で構成されます。
ここでは、この構文の各エレメントについて説明します。
検索式には、フィールド(ディスクリプタ、非ディスクリプタ)、サブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、照合ディスクリプタまたはフォネティックディスクリプタを指定できます。 非ディスクリプタを使用すると、マルチプルバリューフィールドは指定できますが、サブ/スーパーフィールドは指定できません。
非ディスクリプタを使用する場合、Adabas では検索条件を満たすレコードを決定するのにファイル全体を読み込む必要があります。 ただし、ディスクリプタのみを使用した場合、インバーテッドリストが使用され、レコードを読み込む必要はありません。 非ディスクリプタを含む検索条件とディスクリプタを含む検索条件は、組み合わせることができます。
ディスクリプタフィールドを初期化せず、論理的に物理レコードの最後に存在している場合、そのレコードのインバーテッドリストエントリはパフォーマンスの理由から生成されません。したがって、そのレコードは検索できません。 このとき、インバーテッドリストエントリを生成するには、ファイルのアンロード、圧縮解除、再ロードを行います。あるいは、アプリケーションプログラムを使用してファイルのレコードごとにフィールドを初期化してください。
ディスクリプタが NU オプション(空値省略)と定義されている場合は、空値はインバーテッドリストに格納されません。したがって、空値をもつレコードに対し検索を実行すると、(データストレージの中に空値のディスクリプタをもつレコードがある場合でも)結果は検出レコードなしとなります。 この規則は、サブディスクリプタについても適用されます。 スーパーディスクリプタの場合は、スーパーディスクリプタを構成するフィールドのうち少なくとも 1 つのフィールドが NU オプションと定義され、かつそのフィールドが空値であると、スーパーディスクリプタ値は格納されません。
注意:
ラージオブジェクト(LB)フィールドをサーチバッファに指定することはできません。同じく、フォーマット選択条件に指定することもできません。
コマンド ID 値はカッコで囲みます。これは、前回 Sx コマンドで SAVE ISN LIST オプションを指定した結果生成された ISN リストを識別する値です。
オカレンスインデックス( i )は、ピリオディックグループ内のディスクリプタまたは非ディスクリプタの特定のオカレンスを識別し、特定のオカレンスにある値のみを検索できるように制限するのに使用します。 インデックスを指定しないと、全オカレンスの値が検索の対象となります。
インデックスは、1~3 桁から成ります。先行のゼロは可能です。
インデックスは、次の対象には許可されていません。
この場合、ピリオディックグループの全オカレンスの値が検索の対象となります。
SQL 空値圧縮オプション NC のあるフィールドの場合、S 空値インジケータを使用して "空値" か "空値でない" かを選択できます。空値インジケータの説明については、前述の「SQL 有意性(シグニフィカンス)インジケータおよび連続フィールドの指定」を参照してください。
注意:
NC オプションは、NU(空値省略)、FI(固定ストレージ)、MU(マルチプルバリュー)、または
PE(ピリオディックグループ)を指定したフィールド、またはグループフィールドには適用できません。
SQL 有意性(シグニフィカンス)インジケータ(S)は、フィールド名の後に指定する必要があります(フィールド名 S)。また、対応する SQL 空値インジケータはバリューバッファに指定する必要があります。
検索引数として次の 16 進空値インジケータを使用できます。
X'FFFF' | 空値を選択します。 |
0000 | 空値以外を選択します。 |
空値インジケータ値がこれ以外である場合は、Adabas レスポンスコード 52 が返されます。
空値インジケータ値(16 進の FFFF または 0000)は、長さが 2 バイトの標準長で、フォーマットが固定小数点となります。この長さとフォーマットは変更しないでください。
S インジケータとともに使用できる値演算子は等号(=)のみです。他の値演算子を使用すると、Adabas レスポンスコード 61 が返されます。
S 有意性演算子が、フィールド名 AA の検索引数に含まれています。
AAS.
FN フィールド値がパック + 1 で、かつ AA フィールドが空値(未定義)のレコードを選択します。
サーチバッファ |
FN , 2 , P , D , AAS. |
検索引数 |
---|---|---|
バリューバッファ |
001F FFFF |
フィールド値の指定 |
注意:
インデックスには、無意味な空値は格納されません。
このため、空値を検索すると、アプリケーションプログラムのパフォーマンスが大幅に低下する場合があります。
FN フィールド値がパック + 1 で、かつ AA フィールドが空値以外のレコードを選択します。
サーチバッファ |
FN , 2 , P , D , AAS. |
検索引数 |
---|---|---|
バリューバッファ |
001F 0000 |
フィールド値の指定 |
バリューバッファに指定するフィールド/ディスクリプタ値の長さ。 この長さを省略した場合、バリューバッファの値は、「許可されているデータ長とフォーマット」表に示すように、フィールド/ディスクリプタの標準長に準拠する必要があります。
バリューバッファに指定するフィールド/ディスクリプタ値のフォーマット。 このフォーマットを省略した場合、バリューバッファの値は、「許可されているデータ長とフォーマット」表に示すように、フィールド/ディスクリプタの標準のフォーマットに準拠する必要があります。
値演算子は、先行するディスクリプタとバリューバッファ内の対応する値との間で行う論理演算を示します。
次の演算子を指定できます。
演算子 | 説明 |
---|---|
EQ または = | 等しい |
GE | より大きいまたは等しい |
GT または > | より大きい |
LE | より小さいまたは等しい |
LT または < | より小さい |
NE | 等しくない |
値演算子を指定しないと、等しい(EQ)が指定されたものと見なされます。
次のサーチバッファの例は、値演算子の使用方法を示しています。
例 | 説明 |
---|---|
AA. | AA がバリューバッファ内の指定値と等しい(デフォルト)。 |
AA,LT. | AA がバリューバッファ内の指定値より小さい。 |
AA,GE. | AA がバリューバッファ内の指定値より大きいか等しい。 |
NE 演算子(NOT EQUAL TO)を使用した次のサーチバッファは、FN フィールドの値が "MIKE" でないレコードをすべて選択します。
サーチバッファ |
FN,4,A,NE. |
検索引数 |
---|---|---|
バリューバッファ |
MIKE |
フィールド値の指定 |
この例の NE 演算子を EQ(等しい)に置き換えると、FN フィールドの値が
"MIKE" であるレコードのみが選択されます。
結合演算子は、検索式を結合するのに使用します。 次の結合演算子が用意されています。
演算子 | 説明 |
---|---|
D | 2 つの検索式の結果を論理積(AND)演算で結合します。 例としては、次のようなものがあります。
AA,D,AB. |
O | 2 つの検索式の結果を論理和(OR)演算で結合します。 OR
演算は、同じディスクリプタを使用する検索式を結合する場合にのみ使用できます。 有効な例と無効な例は次のとおりです。
有効な例 AA,O,AA. 無効な例(指定した 2 つのディスクリプタが異なる) AA,O,AB. |
R | さまざまなディスクリプタから生成された ISN リストを指すフィールドまたはコマンド ID
を論理和(OR)演算で結合します。 例としては、次のようなものがあります。
AA,5,A,R,AB,LT. |
S | 2 つの検索式の FROM-TO 範囲(開始と終了も含めて)を示します。 2
つの式に同じディスクリプタを指定する必要があります。 有効な例と無効な例は次のとおりです。
有効な例 AA,S,AA. 無効な例(指定した 2 つのディスクリプタが異なる) AA,S,AB. |
N | 直前の FROM-TO 範囲から単一の値またはある範囲の値を除外します。 この演算子は必ず S
演算子とともに指定します。FROM-TO 範囲に指定するフィールドと同じフィールドに適用する必要があります。 フィネティックディスクリプタは指定できません。
以下に、有効な例と無効な例をいくつか示します。
|
Y | D、O、R、S、N の検索式の結果を任意の数だけ論理積(AND)演算で結合します。
例としては、次のようなものがあります。
AA,D,AB,Y,AA,O,AA,Y,AA,S,AA,N,AA,S,AA.Y 結合演算子はカッコのような働きをします。カッコのネストはサポートされておらず、単一レベルにのみ使用できます。 Y 結合演算子で結合される検索式はすべて、同一のファイルに適用する必要があります。 |
詳細な例については、「サーチ/バリューバッファの例」を参照してください。
1 つのサーチバッファ内の引数に複数の結合演算子を指定した場合、結合演算子は次の順で処理されます。
すべての S/N/O 演算子を評価します。
すべての D 演算子を評価します。
すべての R 演算子を評価します。
すべての Y 演算子を評価します。
サーチバッファの指定内容
AA,S,AA,O,AA,D,AB,R,AC,D,AD.
処理される順番
( ( (AA,S,AA),O,AA),D,AB),R,(AC,D,AD)
サーチバッファの指定内容
AA,D,AB,Y,AA,O,AA,Y,AA,S,AA,N,AA,S,AA.
処理される順番
(AA,D,AB),Y,(AA,O,AA),Y,((AA,S,AA),N,(AA,S,AA))
単一ファイル検索に関するサーチバッファは次の構文にしたがいます。
search-expression [{,connecting-operator,search-expression}...] .
search-expressionの構文については、「検索式」を参照してください。 connecting-operatorの詳細については、「検索式の結合」を参照してください。
2 つ以上の物理カップリングファイルのフィールドを使用して、複数ファイル検索を行うサーチバッファの構文は、次のとおりです。
/file-x/search-expression[{,connecting-operator,search-expression}...] {,D,/file-y search-expression/[{,connecting-operator,search-expression}...]}... .
ここで、file-x と file-y には、物理カップリングファイルのファイル番号が入ります。 物理カップリングファイルを使用したサーチバッファ構文については、「物理カップリングファイル」を参照してください。 search-expression の構文については、「検索式」を参照してください。 connecting-operator の詳細については、「検索式の結合」を参照してください。
ソフトカップリングを使用して検索を行うサーチバッファは、次の構文にしたがいます。
(m-file,m-field,s-file,s-field[{;m-file,m-field,s-file,s-field }...])/s-file-x/search-expression[{,connecting-operator,search-expression}... ] [{,D,/s-file-y/search-expression[{,connecting-operator,search-expression}...]}...] .
ここで、m-field s-file-x と s-file-y には、ソフトカップリングファイルのファイル番号が入ります。
ソフトカップリングファイルを使用したサーチバッファ構文については、「ソフトカップリング」を参照してください。 search-expression の構文については、「検索式」を参照してください。 connecting-operator の詳細については、「検索式の結合」を参照してください。
2 つ以上の物理カップリングファイルのフィールドを使用して、複数ファイル検索を行うサーチバッファの構文は、次のとおりです。
/file-x/search-expression[{,connecting-operator,search-expression}...] {,D,/file-y search-expression/[{,connecting-operator,search-expression}...]}... .
物理カップリングファイルの検索条件は任意の順序で指定できます。 実際に返される ISN の値は、Adabas コントロールブロックのファイル番号フィールドに指定したカップリングファイルのものであり、このファイルを "プライマリ" ファイルといいます。
この構文の各要素は次のとおりです。
物理カップリングファイルのファイル番号。 指定するファイルはすべて、ADAINV ユーティリティの COUPLE 機能を使用して、あらかじめカップリングしておく必要があります。 ファイル番号は各ファイルに対し 1 回だけ指定すればよく、 検索条件(1 つ以上の検索式と適切な結合演算子で構成)の直前に指定する必要があります。 物理カップリングファイルの単一のサーチバッファに最大 5(5)ファイルを指定できます。
物理カップリングファイルの検索条件間で許可されている結合演算子は、論理積(AND)の記号 D のみです。
関連する物理カップリングファイルの検索式。 search-expression の構文については、「検索式」を参照してください。
個々の物理カップリングファイルに対する検索条件の検索式をつなぐ結合演算子。 物理的にカップリングされたファイルの検索条件を結合する場合、結合演算子には "D"(AND)を使用する必要があります。個別ファイルを対象とする検索条件から構成される検索式を結合する場合、結合演算子には、「検索式の結合」で説明している演算子をすべて使用することができます。
ファイル 1 のレコードのうち、フィールド RB の値が ABCDE であるファイル 2 のレコードとカップリングされており、かつフィールド AB の値が 3 バイト(長さ指定)アンパック 10 進(フォーマット指定)の +20 であるレコードの ISN を検索します。なお、フィールド AB は 10 バイト標準長の英数字フォーマットです。
サーチバッファ |
/1/AB,3,U,D,/2/RB. |
検索引数 |
---|---|---|
バリューバッファ | character-notation
020ABCDEbbbbbhex-notation F0F2F0C1C2C3C4C54040404040 |
フィールド値の指定 |
ソフトカップリングを使用して検索を行うサーチバッファの構文は次のとおりです。
(m-file,m-field,s-file,s-field[{;m-file,m-field,s-file,s-field }...])/s-file-x/search-expression[{,connecting-operator,search-expression}... ] [{,D,/s-file-y/search-expression[{,connecting-operator,search-expression}...]}...] .
ソフトカップリング検索条件の例については、「サーチ/バリューバッファの例」の例 15~18 を参照してください。
この構文の各要素は次のとおりです。
m-file には、主ファイルの番号を指定します。 このファイルは、Adabas コントロールブロックのファイル番号フィールドに指定されていなければなりません。 最終的に返される ISN 結果リストには、主ファイルにのみ存在する ISN が記載されます。
m-field には、ソフトカップリングのリンクフィールドとして使用される主ファイルのフィールドを指定します。 このフィールドは、ディスクリプタ、サブディスクリプタ、スーパーディスクリプタまたはハイパーディスクリプタでなければなりません。 ピリオディックグループ内のフィールドまたはロング英数字フィールドは指定できません。
m-file、m-field、s-file、s-field の指定を組み合わせたものが、単一のソフトカップリングとなります。 最大で 42 のソフトカップリング条件が指定できます。 ソフトカップリング全体を 1 組のかっこの中に指定する必要があります。
s-file には検索ファイルのファイル番号を指定し、s-field には検索ファイル内のフィールドを指定します。 (検索条件に従って)この検索ファイルから選択された ISN ごとに、s-field として指定したフィールドが読み込まれます。 このフィールド値は、主ファイルのどの ISN に一致する値があるかを判断するのに使用されます。
このフィールドは、ディスクリプタでも非ディスクリプタでもよく、サブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、ロング英数字フィールドであってもかまいません。 フォーマットは、対応する m-field フィールドのものと同じでなければなりません。 標準長は異なっていてもかまいません。 このフィールドはピリオディックグループに含まれていてはなりません。
m-file、m-field、s-file、s-field の指定を組み合わせたものが、単一のソフトカップリングとなります。 最大で 42 のソフトカップリング条件が指定できます。 ソフトカップリング全体を 1 組のかっこの中に指定する必要があります。
検索条件を指定するカップリングファイルのファイル番号。 ファイル番号は各ファイルに対し 1 回だけ指定すればよく、 検索条件(1 つ以上の検索式と適切な結合演算子で構成)の直前に指定する必要があります。 単一のサーチバッファに最大 5(5)ファイルを指定できます。
カップリングファイルの検索条件間で許可されている結合演算子は、論理積(AND)の記号 D のみです。
関連するカップリングファイルの検索式。 search-expression の構文については、「検索式」を参照してください。
個々のカップリングファイルに対する検索条件の検索式をつなぐ結合演算子。 物理的にカップリングされたファイルの検索条件を結合する場合、結合演算子には "D"(AND)を使用する必要があります。個別ファイルを対象とする検索条件から構成される検索式を結合する場合、結合演算子には、「検索式の結合」で説明している演算子をすべて使用することができます。