バージョン 4.2.5
 —  ステートメント  —

FIND

FIND

ALL
(operand1)
FIRST
NUMBER
UNIQUE

[MULTI-FETCH-clause] [RECORDS] [IN] [FILE] view-name
  [PASSWORD=operand2]
  [CIPHER=operand3]
  [WITH] [[LIMIT] (operand4)] basic-search-criterion
  [COUPLED-clause] 4/42
  [STARTING WITH ISN=operand5]
  [SORTED-BY-clause]
  [RETAIN-clause]
  [WHERE-clause]
  [IF-NO-RECORDS-FOUND-clause]
  statement
END-FIND   (ストラクチャードモードのみ)
[LOOP]   (レポーティングモードのみ)

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:ACCEPT/REJECT | AT BREAK | AT START OF DATA | AT END OF DATA | BACKOUT TRANSACTION | BEFORE BREAK PROCESSING | DELETE | END TRANSACTION | FIND | GET | GET SAME | GET TRANSACTION | HISTOGRAM | LIMIT | PASSW | PERFORM BREAK PROCESSING | READ | RETRY | STORE | UPDATE

関連機能グループ:「データベースへのアクセスと更新


機能

FIND ステートメントは、ディスクリプタ(キー)として定義したフィールドの検索条件をもとに、データベースからレコードの集合を選択します。

このステートメントは処理ループを開始させ、選択された各レコードに対してループ内の処理が行われます。 各レコードのすべてのフィールドを処理ループ内で参照できます。 そのため、選択した各レコード内のフィールドを参照するために、FIND ステートメントに続けて READ ステートメントを発行する必要はありません。

プログラミングガイド』の「FIND ステートメント」も参照してください。

データベース固有の考慮事項

DL/I 与えられたセグメントオカレンスの、最後のバイトの次から始まるフィールドをアクセスするとき、このフィールドのストレージコピーは、そのフォーマット(数字、空白など)に合わせて埋められます。 FIND ステートメントに関する記述中のレコードという用語を、セグメントオカレンスという用語に置き換える必要があります。
VSAM FIND ステートメントは、キー順(KSDS)およびエントリ順(ESDS)の VSAM データセットにのみ有効です。 ESDS データセットには、ベースクラスタの代替インデックスを定義する必要があります。
SQL

FIND FIRST は使用できません。PASSWORDCIPHERCOUPLEDRETAIN の各節も使用できません。

FIND UNIQUE は許可されていません。 (例外:FIND UNIQUE はプライマリキーに対して使用できますが、これは互換性のためだけであるため使用しないでください)。

SORTED BY 節は SQL の ORDER BY 節に相当します。

SQL データベーステーブルに対する基本検索条件は Adabas ファイルの場合と同じ方法で指定できます。 本文で使用する用語レコードは SQL 用語の "行" に相当します。

FIND ステートメントで使用可能な Natural システム変数

発行された FIND ステートメントごとに *ISN*NUMBER および *COUNTER の各 Natural システム変数が自動的に生成されます。 実行中の処理ループの外側や、FIND UNIQUEFIND FIRSTFIND NUMBER のステートメントで生成されたシステム変数を参照する場合は、参照番号を指定する必要があります。 これらのシステム変数のフォーマットおよび長さは P10 です。これを変更することはできません。

*ISN
Adabas 現在処理中のレコードの Adabas 内部シーケンス番号(ISN)が *ISN に含まれます。 FIND NUMBER ステートメントでは、*ISN は使用できません。
VSAM システム変数』ドキュメントの「VSAM に対する *ISN」を参照してください。
DL/I および SQL *ISN は使用できません。
Entire System Server *ISN は使用できません。
*NUMBER
Adabas システム変数 *NUMBER には、WITH 節で指定された基本検索条件を満たすレコード件数が含まれます。
VSAM システム変数』ドキュメントの「VSAM に対する *NUMBER」を参照してください。
DL/I システム変数』ドキュメントの「DL/I に対する *NUMBER」を参照してください。
Entire System Server *NUMBER は使用できません。
*COUNTER システム変数 *COUNTER には、入力した処理ループの回数が含まれます。

例 13 - FIND ステートメントで使用可能な Natural システム変数」も参照してください。

複数の FIND ステートメント

複数の FIND ステートメントを発行してループのネスト構造を作成することができます。その際に、外側の選択レコードごとに内側のループ処理が行われます。

例 14 - 複数の FIND ステートメント」も参照してください。

Top of page

制限

Entire System Server では、FIND NUMBER および FIND UNIQUE は使用できません。PASSWORDCIPHERCOUPLEDRETAIN の各節も使用できません。

Top of page

構文説明

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
operand1 C S         N P I   B*             不可
operand2 C S       A                       不可
operand3 C S         N                     不可
operand4 C S         N P I   B*             不可
operand5 C S         N P I   B*             不可

* operand1operand4 および operand5 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

ALL/operand1
処理制限:

選択された集合から処理するレコード件数は、operand1 として定数(0~4294967295 の範囲)や数値のユーザー定義変数名をカッコで囲んで指定することで制限できます。

ALL は、オプションで指定してもよく、選択されたレコードをすべて処理することを強調するものです。

operand1 によって制限が指定された場合、この制限は FIND で開始した処理ループに適用されます。 WHERE 節で除かれたレコードは、この制限値の対象とはなりません。

FIND (5) IN EMPLOYEES WITH ...
  
MOVE 10 TO #CNT(N2)
FIND (#CNT) EMPLOYEES WITH ...

このステートメントでは、指定した制限が、LIMIT ステートメントで設定した制限より優先されます。

LT パラメータで設定された制限の方が小さい場合は、LT 制限が有効になります。

注意:

  1. 4 桁のレコード件数を指定する場合は、リーディングゼロを指定してください(0nnnn)。それは、カッコで囲まれた 4 桁の数はすべて、ステートメントを参照する行番号であると Natural が解釈するためです。
  2. operand1RETAIN 節で保持される ISN 集合のサイズには影響しません。 operand1FIND ループに入るときに評価されます。 operand1 の値が FIND ループ内で変更されても、この値は処理するレコード数に影響を与えません。
FIND FIRST | FIND NUMBER | FIND UNIQUE

これらのオプションは、

  • 選択されたレコードの集合の最初の 1 件を使用する(FIND FIRST)、

  • 選択された集合のレコード件数を得る(FIND NUMBER)、

  • または 1 レコードだけが検索条件を満たすことを保証する(FIND UNIQUE)ために使用します。

これらのオプションの詳細な説明については、下記を参照してください。

MULTI-FETCH-clause

Adabas データベースの場合、Natural はデータベースアクセス当たり 1 回以上の読み取りを許可する MULTI-FETCH 節を提供します。 詳細については、「MULTI-FETCH 節」を参照してください。

view-name

DEFINE DATA ステートメント内、またはグローバルデータエリアやローカルデータエリアで定義されたビュー名です。

レポーティングモードでは、view-name を DDM の名前にすることもできます。

PASSWORD=operand2
PASSWORD 節:

PASSWORD 節は、Adabas または VSAM データベースにのみ適用されます。 この節は Entire System Server では使用できません。

PASSWORD 節は、パスワード保護された Adabas または VSAM ファイルのデータを読み込むときまたは書き込むときに、そのパスワード(operand2)を指定するために使用します。 パスワードで保護されたファイルにアクセスするときは、データベースセキュリティ責任者にパスワードの使用や割り当てについて相談してください。

パスワードを定数で指定する場合、PASSWORD 節は必ずソースコード行の第 1 桁目からコーディングします。また、キーワード PASSWORD と等号の間には空白を入れないでください。そうすれば、プログラムのソースコードをリストしたときに、サイファキーはリストに出力されません。

TP モードでは、PASSWORD 節を打ち込む前に %* 端末コマンドを入力すれば、パスワードは表示されません。

PASSWORD 節を省略すると、PASSW ステートメントで指定したパスワードが適用されます。

パスワードの値は、処理ループの実行中に変更しないでください。

例 1 - PASSWORD 節」も参照してください。

CIPHER=operand3
CIPHER 節:

CIPHER 節は Adabas データベースにのみ適用されます。 この節は Entire System Server では使用できません。

CIPHER 節は、サイファリング(暗号化)された Adabas ファイルからデータを読み込むとき、そのサイファキー(operand3)を指定します。 サイファリングされたファイルにアクセスするときは、データベースセキュリティの責任者にサイファキーの使用や割り当てについて相談してください。

サイファキーは、数値定数(8 桁)またはユーザー定義変数(N8)で指定できます。

サイファキーを定数で指定する場合、CIPHER 節は必ずソースコード行の第 1 桁目からコーディングします。そうすれば、プログラムのソースコードをリストしたときに、サイファキーはリストに出力されません。 TP モードでは、CIPHER 節を打ち込む前に %* 端末コマンドを入力すると、CIPHER 節は表示されません。

サイファキーの値は、FIND ステートメントで開始された処理ループ内では変更しないでください。

例 2 - CIPHER 節」も参照してください。

WITH LIMIT operand4 basic-search-criterion
WITH 節:

WITH 節は必須です。 データベースで定義されているキーフィールド(ディスクリプタ)から構成される basic-search-criterion を指定するために使用されます(「Adabas ファイルに対する基本検索条件」を参照)。

次のデータベース固有の考慮事項が適用されます。

Adabas ファイルの場合: WITH 節でディスクリプタ、サブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、およびフォネティックディスクリプタを使用できます。 非ディスクリプタ(DDM に N と設定されたフィールド)も指定できます。
DL/I ファイルの場合: DDM で D と設定されたキーフィールドだけを検索条件に使用できます。
VSAM ファイルの場合: VSAM のキーフィールドだけを使用できます。

WITH 節で選択するレコード件数は、キーワード LIMIT とともに数値定数やユーザー定義変数をカッコで囲んだ制限値(operand4)で指定できます。 選択レコード件数が制限値を超過した場合、エラーメッセージが出力されプログラムが終了します。

注意:
制限が 4 桁の数の場合、リーディングゼロを指定する必要があります(0nnnn)。これは、カッコで囲まれた 4 桁の数は、すべてステートメントを参照する行番号であると Natural が解釈するためです。

COUPLED-clause この節は、Adabas のカップリング機能を使用した検索を行います。 「COUPLED 節」を参照してください。
STARTING WITH ISN=operand5 この節は、処理を継続する次のレコードを簡単に指定するために、中断された FIND ループ内での再位置決めに使用できます。 「STARTING WITH 節」を参照してください。
SORTED-BY-clause SORTED BY 節は、選択したレコードを 1 個~3 個のディスクリプタを基準に Adabas ソートします。 「SORTED BY 節」を参照してください。
RETAIN-clause この節を使用して、大規模ファイルの検索結果を以降の処理のために保持しておくことができます。 「RETAIN 節」を参照してください。
WHERE-clause この節を使用して、追加の選択条件(logical-condition)を指定できます。 「WHERE 節」を参照してください。
IF-NO-RECORDS-FOUND-clause IF NO RECORDS FOUND 節を使用すると、WITH 節および WHERE 節で指定された選択条件を満たすレコードがない場合でも、FIND ステートメントで始まる処理ループに入ります。 「IF NO RECORDS FOUND 節」を参照してください。
END-FIND FIND ステートメントを終了するには、Natural の予約キーワード END-FIND を使用する必要があります。

FIND FIRST

FIND FIRST ステートメントは、WITH 条件および WHERE 条件を満たす最初の 1 件のレコードを選択し、処理します。

Adabas データベースでは、選択レコードのうち最も低い Adabas ISN 値を持つレコードが処理されます。

このステートメントは処理ループを開始しません

制限

FIND FIRSTで使用可能なシステム変数

次の Natural システム変数が FIND FIRST ステートメントで使用できます。

*ISN

システム変数 *ISN には選択レコードの Adabas ISN が含まれます。 WITH および WHERE 条件の評価後にレコードが 1 件も見つからなかった場合、*ISN はゼロになります。

VSAM データベースあるいは Entire System Server では、*ISN を使用できません。

*NUMBER

システム変数 *NUMBER には、WITH 条件の評価後、WHERE 条件が評価される前のレコード数が含まれます。 WITH 条件を満たすレコードがなければ、*NUMBER はゼロになります。

Entire System Server では *NUMBER を使用できません。

*COUNTER レコードが見つかった場合は 1、レコードが見つからなかった場合は 0 が、システム変数 *COUNTER に含まれます。

FIND FIRST ステートメントの例:FNDFIR プログラム(レポーティングモード)を参照してください。

FIND NUMBER

FIND NUMBER ステートメントは、指定した WITH/WHERE 条件を満たすレコード件数を得るために使用します。 処理ループは開始されずデータベースのフィールドも使用できません

注意:
WHERE 節を使用すると、負荷が生じることがあります。

制限

FIND NUMBER で使用可能なシステム変数

次の Natural システム変数が FIND NUMBER ステートメントで使用できます。

*NUMBER

システム変数 *NUMBER には、WITH 条件の評価後に見つかったレコード数が含まれます。

*COUNTER

システム変数 *COUNTER には、WHERE 条件の評価後に見つかったレコード数が含まれます。

*COUNTER は、FIND NUMBER ステートメントに WHERE 節が指定された場合にのみ有効です。

FIND NUMBER の例:FNDNUM プログラム(レポーティングモード)を参照してください。

FIND UNIQUE

FIND UNIQUE ステートメントは、処理のために選択されたレコードが 1 件だけであることを保証するために使用します。 処理ループは開始しませんWHERE 節の指定がある場合、WHERE 節を評価する内部処理ループが自動的に生成されます。

条件を満たすレコードがないとき、あるいは条件を満たすレコードが複数あるときは、エラーメッセージが返されます。 ON ERROR ステートメントで、エラー条件をチェックできます。

FIND UNIQUE で使用できるシステム変数

*ISN システム変数 *ISN は、レコードの一意な ISN 番号を持ちます。レコード自体が一意である必要があります。
*NUMBER

システム変数 *NUMBER は、有効な FIND UNIQUE 実行に対しては常に 1 です。

エラーが発生した場合、*NUMBER は、他の値(=0 または >=2)を含んでいる可能性があります。 このエラー条件は、ON ERROR ステートメントで使用することができます。 WHERE 節が指定されていない場合、*NUMBER は評価されません。

*COUNTER システム変数 *COUNTER には、WHERE 条件の評価後に見つかったレコード数が含まれます。 WHERE 節が指定されていない場合、*COUNTER は評価されません。

制限事項

FIND UNIQUE の例:FNDUNQ プログラム(レポーティングモード)を参照してください

MULTI-FETCH 節

注意:
この節は、Adabas または DB2 データベースでのみ使用できます。

MULTI-FETCH 

ON
OFF
OF multi-fetch-factor

詳細については、『プログラミングガイド』の「MULTI-FETCH 節」(Adabas)または『データベース管理システムインターフェイス』ドキュメントの「Natural for DB2」で「複数行の処理」(SQL)を参照してください。

Adabas ファイルに対する基本検索条件

1 descriptor   [(i)]

EQ
=
EQUAL
EQUAL TO

value

OR

EQ
=
EQUAL
EQUAL TO

value

THRU value[BUT NOTvalue [THRUvalue]]
2 descriptor  [(i)]

EQ
=
EQUAL
EQUAL TO
NE
=
< >
NOT =
NOT EQ
NOTEQUAL
NOT EQUAL
NOT EQUAL TO
LT
LESS THAN
<
GE
GREATER EQUAL
>=
NOT <
NOT LT
GREATER THAN
>
LE
LESS EQUAL
<=
NOT >
NOT GT

value                  
                 
                 
                 
3set-name                          

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
descriptor   S A     A   N P I F B D T L       不可 不可
value C S       A   N P I F B D T L       不可
set-name C S       A                         不可 不可

構文要素の説明:

descriptor Adabas ディスクリプタ、サブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、またはフォネティックディスクリプタ。 DDM でディスクリプタ以外としてマークされたフィールドも指定できます。
(i)

ピリオディックグループに含まれるディスクリプタをインデックス付きまたはなしで指定できます。 インデックスなしで指定した場合、レコードは指定した値がいずれかのオカレンスに見つかった場合に選択されます。 インデックス付きで指定した場合、レコードは値がインデックスで指定したオカレンス内に見つかった場合にのみ選択されます。 インデックスは定数で指定する必要があります。 インデックス範囲は使用できません。

マルチプルバリューフィールドのディスクリプタは、インデックスなしで指定する必要があります。 レコードは、値がレコード内で位置に関係なく見つかった場合に選択されます。

value 検索条件値。 ディスクリプタと検索値のフォーマットは変換可能にする必要があります。
set-name RETAIN 節を指定した FIND ステートメントで、すでに選択されたレコードの集合の名前です。 FIND で参照する集合名は、同じ物理 Adabas ファイルから作成する必要があります。 set-name は、最大 32 文字の文字定数、あるいは英数字フォーマットの変数として指定します。 set-name は、Entire System Server では使用できません。

以下の項目も参照してください。

NULL インジケータでの検索条件

null-indicator

=
EQ
EQUAL
[TO]

value

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
null-indicator   S             I                 不可 不可
value C S         N P I F B             不可

構文要素の説明:

null-indicator 空値インジケータ。
value 指定可能な値
-1 対応するフィールドは値を含んでいません。
0 対応するフィールドは値を含んでいます。

検索条件の結合(Adabas ファイル使用時)

Basic-search-criteria は、ブール演算子 AND、OR および NOT を使用して結合できます。 カッコで囲んで評価の優先順位を制御することもできます。 評価の順序は次のとおりです。

  1. ( ):カッコ

  2. NOT:否定([2] の形式の basic-search-criterion にのみ可)

  3. AND:AND 結合

  4. OR:OR 結合

Basic-search-criteria は論理演算子で複合 search-expression の形に結合できます。 複合 search-expression の構文は次のようになります。

[NOT]

basic-search-criterion
(search-expression)

OR
AND

search-expression

例 5 - WITH 節のさまざまな複合検索式の例」も参照してください。

ディスクリプタ(キー)の使用

Adabas ユーザーは、ディスクリプタとして定義されているデータベースフィールドを基本検索条件に使用できます。

サブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、フォネティックディスクリプタ

Adabas では、検索条件にサブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、およびフォネティックディスクリプタが使用できます。

どのファイルのどのフィールドをディスクリプタ、サブディスクリプタ、スーパーディスクリプタ、ハイパーディスクリプタ、フォネティックディスクリプタとして使用できるかは対応する DDM に定義されます。

サブディスクリプタ、スーパーディスクリプタ、フォネティックディスクリプタに対する値

これらのディスクリプタ値は、ディスクリプタの内部フォーマットに対して変換できる必要があります。 サブディスクリプタの内部フォーマットは、そのサブディスクリプタを作り出したもとのフィールドのフォーマットと同じです。 スーパーディスクリプタの内部フォーマットは、もとのフィールドがすべて数字フォーマットのときはバイナリであり、そうでなければ英数字フォーマットです。 フォネティックディスクリプタは、常に英数字フォーマットです。

サブディスクリプタやスーパーディスクリプタの値は、次のように指定できます。

データベース配列内のディスクリプタの使用

データベース内の配列に含まれるディスクリプタも、基本検索条件の中に使用できます。 Adabas データベースを使用している場合、MU または PE に含まれるディスクリプタのことです。

ピリオディックグループに含まれるディスクリプタをインデックス付きまたはなしで指定できます。 インデックスなしで指定した場合、レコードは指定した値がいずれかのオカレンスに見つかった場合に選択されます。 インデックス付きで指定した場合、レコードは値がインデックスで指定したオカレンス内に見つかった場合にのみ選択されます。 インデックスは定数で指定する必要があります。 インデックス範囲は使用できません。

マルチプルバリューフィールドのディスクリプタは、インデックスなしで指定する必要があります。 レコードは、値がレコード内で位置に関係なく見つかった場合に選択されます。

例 6 - データベース配列のさまざまな使用例」も参照してください。

VSAM ファイルに対する基本検索条件

1 descriptor

EQ
=
EQUAL
EQUAL TO
NE
=
< >
NOT =
NOT EQ
NOTEQUAL
NOT EQUAL
NOT EQUAL TO
LT
LESS THAN
<
GE
GREATER EQUAL
>=
NOT <
NOT LT
GT
GREATER THAN
>
LE
LESS EQUAL
<=
NOT >
NOT GT

value
2 descriptor

EQ
=
EQUAL
EQUAL TO

value THRUvalue

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
descriptor   S A     A N P     B             不可 不可
value C S       A N P     B             不可

構文要素の説明:

descriptor ディスクリプタは、VSAM キーフィールドとして VSAM ファイルに定義され、DDM 内に P(プライマリキー)または A(オルタネートキー)を設定する必要があります。
value 検索値。

descriptor と検索 value のフォーマットは変換可能にする必要があります。

DL/I ファイルに対する基本検索条件

1 descriptor

EQ
=
EQUAL
EQUAL TO
NE
=
< >
NOT =
NOT EQ
NOTEQUAL
NOT EQUAL
NOT EQUAL TO
LT
LESS THAN
<
GE
GREATER EQUAL
>=
NOT <
NOT LT
GT
GREATER THAN
>
LE
LESS EQUAL
<=
NOT >
NOT GT

value
2 descriptor

EQ
=
EQUAL
EQUAL TO

value THRUvalue   [BUT NOT value]

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
descriptor   S A     A N P     B             不可 不可
value C S       A N P     B             不可

構文要素の説明:

descriptor ディスクリプタは、DL/I 内で定義されたフィールドで、DDM 内に D と設定されている必要があります。
value 検索値。

HDAM データベースに対しては、次の basic-search-criterion だけが使用できます。

descriptor

EQ
=
EQUAL
[TO]

value

検索条件の結合 - DL/I ファイル使用時

[NOT]

basic-search-criterion
(search-expression)

OR
AND

search-expression

異なるセグメントタイプを参照する basic-search-criteria は、OR 論理演算子で結合しないでください。

例:

FIND COURSE WITH COURSEN > 1
FIND COURSE WITH COURSEN > 1 AND COURSEN < 100
FIND OFFERING WITH (COURSEN-COURSE > 1 OR TITLE-COURSE = 'Natural')  
                   AND LOCATION = 'DARMSTADT'

無効な例:

FIND OFFERING WITH COURSEN-COURSE > 1 OR LOCATION = 'DARMSTADT'

COUPLED 節

この節は Adabas データベースにのみ適用されます。

この節は Entire System Server では使用できません。

AND
OR

COUPLED   [TO] [FILE] view-name          
       

VIA descriptor1

EQ
=
EQUAL
EQUAL TO

descriptor2

                     
          [WITH] basic-search-criteria          

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
descriptor1   S A     A N P     B             不可 不可
descriptor2   S A     A N P     B             不可 不可

注意:
VIA 節を指定しない場合は、COUPLED 節を 4 回まで指定できますが、VIA 節を使用すると、42 回まで指定できます。

COUPLED 節は、Adabas のカップリング機能を使用した検索を行います。 この機能により、1 つの FIND ステートメントの検索条件の中に、異なるファイルのデータベースディスクリプタを指定することができます。

同じ Adabas ファイルを、1 つの FIND ステートメントの異なる FIND COUPLED 節に使用しないでください。

set-nameRETAIN 節参照)を basic-search-criteria に指定しないでください。

COUPLED 節内で指定したファイルのデータベースフィールドは、別の FINDREAD ステートメントをカップリングされたファイルに発行しない限り、プログラム内で後から参照することはできません。

注意:
COUPLED 節を使用する場合は、メインの WITH 節を省略できます。 メインの WITH 節を省略するときは、COUPLED 節でキーワード AND/OR を指定しないでください。

物理カップリング(VIA指定なし)

VIA を指定しない COUPLED 節に使用するファイルは、所定の Adabas ユーティリティ(Adabas ドキュメントを参照)を使用して物理的にカップリングされている必要があります。

例 7 - 物理カップリングファイルの使用」も参照してください。

上の例で、DISPLAY ステートメントの NAME は、EMPLOYEES ファイル内にあるので参照できますが、MAKECOUPLED 節に指定された VEHICLES ファイル内にあるので参照できません。

EMPLOYEES と VEHICLES が物理的にカップリングされている場合にのみ、レコードの検索が行われます。

論理カップリング - VIA 節

オプション VIA descriptor1 = descriptor2 により、検索参照で複数の Adabas ファイルの論理カップリングが可能となります。

2 つのファイルは Adabas で物理的にカップリングする必要はありません。 この COUPLED オプションは、Adabas のソフトカップリング機能(Adabas ドキュメントを参照)を使用します。

例 8 - VIA 節」も参照してください。

STARTING WITH 節

この節は、Adabas および VSAM データベースにのみ適用されます。VSAM では、ESDS にのみ有効です。

operand5 として、Adabas ISN(内部シーケンス番号)または VSAM RBA(相対バイトアドレス)を指定するために、この節を使用すると、レコードの選択のための開始値として使用されます。

この節は、処理を継続する次のレコードを簡単に確定するために、処理が中断された FIND ループ内で再位置決めに使用できます。 これは特に、次のレコードをディスクリプタ値で一意に識別できない場合に役立ちます。 また、分散クライアント/サーバーアプリケーションで、レコードをサーバープログラムで読み取ってクライアントプログラムで処理し、レコードを順次処理ではなくバッチ処理する場合にも役立ちます。

注意:
実際に使用される開始値は operand5 の値ではなく、次に高い値になります。

例:

ライブラリ SYSEXSYN のプログラム FNDSISN を参照してください。

SORTED BY 節

この節は、Adabas、または SQL データベースにのみ適用されます。

この節は Entire System Server では使用できません。

SORTED [BY] descriptor 3 [DESCENDING]

SORTED BY 節は、選択したレコードを 1 個~3 個のディスクリプタを基準に Adabas ソートします。 ソートの順番を制御するディスクリプタと、レコードの選択に使用するディスクリプタは、異なるものを指定できます。

デフォルトで、レコードは昇順にソートされます。降順にソートする場合は、キーワード DESCENDING を指定します。 ソートは、レコードを読み込まず、Adabas インバーテッドリストを使用して行われます。

注意:
ソート順を制御するディスクリプタの値の数が多くなると負荷も大きくなります。 これは、選択された全レコードがリスト内に位置づけられるまで値のリスト全体をスキャンするからです。 大量のレコードをソートするときには、SORT ステートメントを使用してください。

Adabas のソート制限(Adabas ドキュメントの ADARUN の LS パラメータを参照)は、SORTED BY 節を使用するときに影響します。

PE 内のディスクリプタを SORTED BY 節に使用しないでください。 MU(添字指定なし)は指定できます。

SORTED BY 節にディスクリプタ以外も指定できます。 ただし、メインフレーム環境では、この機能は利用できません。

SORTED BY 節を使用する場合、RETAIN 節を一緒に使用しないでください。

例 9 - SORTED BY 節」も参照してください。

STARTING WITH 節と SORTED BY 節を組み合わせて使用する場合の考慮事項

STARTING WITH 節と SORTED BY 節の両方が同じ FIND ステートメントで使用され、基準データベースが Adabas の場合は、次の点を考慮する必要があります。

Adabas for Mainframes の場合

Adabas for Mainframes では、FIND ステートメントは次の手順で実行されます。

  1. 検索条件に一致するすべてのレコードが収集され、ISN 順序で配置されます。

  2. レコードは、SORTED BY 節で指定されたディスクリプタの順にソートされます。

  3. ISN 値が STARTING WITH 節で指定されているレコードは、"sorted-by-descriptor" レコードリストに配置されます。

  4. 手順 3 で見つかったレコードに続くレコードが、FIND ループで返されます。

Adabas for OpenSystems の場合

Adabas for OpenSystems(UNIX、OpenVMS、Windows)では、同じステートメントは次のように実行されます。

  1. 検索条件に一致するすべてのレコードが収集され、ISN 順序で配置されます。

  2. ISN 値が STARTING WITH 節で指定されているレコードは、"sorted-by-ISN" レコードリストに配置されます。

  3. 手順 2 で見つかったレコードに続くすべてのレコードは、SORTED BY 節で指定されたディスクリプタ順にソートされ、FIND ループで返されます。

例:

次のプログラムがメインフレーム用の Adabas バージョン 8 および UNIX/OpenVMS/Windows 用の Adabas バージョン 6.1 で実行される場合:

DEFINE DATA LOCAL                                        
1 V1 VIEW OF EMPLOYEES                                   
  2 NAME                                                 
  2 FIRST-NAME                                           
  2 CITY                                                 
1 #ISN (I4)                                              
END-DEFINE                                               
FORMAT NL=5 SG=OFF PS=43 AL=15                           
*                                                        
PRINT   'FIND' (I)                                       
FIND V1 WITH NAME = 'B' THRU 'BALBIN'                    
  RETAIN AS 'SET1'                                       
  IF *COUNTER = 4 THEN                                   
    #ISN := *ISN                                         
  END-IF                                                 
  DISPLAY *ISN V1                                        
END-FIND                                                 
*                                                        
PRINT / 'FIND .. SORTED BY NAME' (I)                     
FIND V1 WITH 'SET1'                                      
  SORTED BY NAME                                         
  DISPLAY *ISN V1                                        
END-FIND                                                 
*                                                        
PRINT / 'FIND .. STARTING WITH ISN = ' (I) #ISN (AD=I)   
FIND V1 WITH 'SET1'                                      
  STARTING WITH ISN = #ISN                               
  DISPLAY *ISN V1                                        
END-FIND                                                 
*                                                        
PRINT / 'FIND .. STARTING WITH ISN = ' (I) #ISN (AD=I)   
        ' .. SORTED BY NAME' (I)                         
FIND V1 WITH 'SET1'                                      
  STARTING WITH ISN = #ISN                               
  SORTED BY NAME                                         
  DISPLAY *ISN V1                                        
END-FIND                                                 
END

結果は次のとおりです。

Natural for Mainframes(Adabas バージョン 8)での結果 Natural for OpenSystems(Adabas バージョン 6.1)での結果
ISN        NAME         FIRST-NAME         CITY       
----- --------------- --------------- --------------- 
                                                      
FIND V1 WITH NAME = 'B' THRU 'BALBIN'
   12 BAILLET         PATRICK         LYS LEZ LANNOY 
   58 BAGAZJA         MARJAN          MONTHERME       
  351 BAECKER         JOHANNES        FRANKFURT       
  355 BAECKER         KARL            SINDELFINGEN    
  370 BACHMANN        HANS            MUENCHEN        
  490 BALBIN          ENRIQUE         BARCELONA       
  650 BAKER           SYLVIA          OAK BROOK       
  913 BAKER           PAULINE         DERBY           
                                                      
FIND .. SORTED BY NAME                                
  370 BACHMANN        HANS            MUENCHEN        
  351 BAECKER         JOHANNES        FRANKFURT       
  355 BAECKER         KARL            SINDELFINGEN    
   58 BAGAZJA         MARJAN          MONTHERME
   12 BAILLET         PATRICK         LYS LEZ LANNOY  
  650 BAKER           SYLVIA          OAK BROOK       
  913 BAKER           PAULINE         DERBY           
  490 BALBIN          ENRIQUE         BARCELONA 
                                                      
FIND .. STARTING WITH ISN = 355                    
  370 BACHMANN        HANS            MUENCHEN        
  490 BALBIN          ENRIQUE         BARCELONA       
  650 BAKER           SYLVIA          OAK BROOK       
  913 BAKER           PAULINE         DERBY           
                                                      
FIND .. STARTING WITH ISN = 355 .. SORTED BY NAME  
   58 BAGAZJA         MARJAN          MONTHERME       
   12 BAILLET         PATRICK         LYS LEZ LANNOY  
  650 BAKER           SYLVIA          OAK BROOK       
  913 BAKER           PAULINE         DERBY           
  490 BALBIN          ENRIQUE         BARCELONA  
ISN        NAME         FIRST-NAME         CITY       
----- --------------- --------------- --------------- 
                                                      
FIND V1 WITH NAME = 'B' THRU 'BALBIN'                 
   12 BAILLET         PATRICK         LYS LEZ LANNOY  
   58 BAGAZJA         MARJAN          MONTHERME       
  351 BAECKER         JOHANNES        FRANKFURT       
  355 BAECKER         KARL            SINDELFINGEN    
  370 BACHMANN        HANS            MUENCHEN        
  490 BALBIN          ENRIQUE         BARCELONA       
  650 BAKER           SYLVIA          OAK BROOK       
  913 BAKER           PAULINE         DERBY           
                                                      
FIND .. SORTED BY NAME                                
  370 BACHMANN        HANS            MUENCHEN        
  351 BAECKER         JOHANNES        FRANKFURT       
  355 BAECKER         KARL            SINDELFINGEN    
   58 BAGAZJA         MARJAN          MONTHERME       
   12 BAILLET         PATRICK         LYS LEZ LANNOY  
  650 BAKER           SYLVIA          OAK BROOK       
  913 BAKER           PAULINE         DERBY           
  490 BALBIN          ENRIQUE         BARCELONA       
                                                      
FIND .. STARTING WITH ISN = 355                    
  370 BACHMANN        HANS            MUENCHEN        
  490 BALBIN          ENRIQUE         BARCELONA 
  650 BAKER           SYLVIA          OAK BROOK 
  913 BAKER           PAULINE         DERBY 

FIND .. STARTING WITH ISN = 355 .. SORTED BY NAME  
  370 BACHMANN        HANS            MUENCHEN
  650 BAKER           SYLVIA          OAK BROOK
  913 BAKER           PAULINE         DERBY 
  490 BALBIN          ENRIQUE         BARCELONA

これらのオプション(SORTED BY または STARTING WITH ISN)の 1 つを指定した FIND ステートメントは、ステートメントが実行されたシステムにかかわらず、同じ順序で同じレコードを返します。 一方、両方の節が一緒に使用されている場合、返される結果は、データベースステートメントの処理に使用されている Adabas プラットフォームによって異なります。

したがって、Natural プログラムが複数のプラットフォームで使用されることを意図している場合は、同じ FIND ステートメントで SORTED BY 節と STARTING WITH ISN 節を組み合わせて使用することは避ける必要があります。

RETAIN 節

この節は Adabas データベースにのみ適用されます。

この節は Entire System Server では使用できません。

RETAIN AS operand6

オペランド定義テーブル:

オペランド 構文要素 フォーマット ステートメント参照 ダイナミック定義
operand6 C S       A                       不可

構文要素の説明:

RETAIN AS

RETAIN 節を使用すると、大規模ファイルの検索結果を以降の処理のために保持しておくことができます。

選択されたレコードは、Adabas ワークファイルに ISN-set として保持されます。 この集合を後続の FIND ステートメントの基本検索条件で指定して、さらにしぼり込んだり、レコードを処理したりできます。

生成された集合は、特定のファイルに属します。他の FIND ステートメントで集合を使用する場合は、同じファイルを処理する必要があります。 集合は、どの Natural プログラムでも参照できます。

operand6
集合名:

集合名は、レコードの集合を識別するために使用します。 英数字定数あるいは英数字のユーザー定義変数の内容として指定できます。 集合名の重複はチェックされません。そのため、同じ集合名を指定すると、新しい集合が古い集合を置き換えます。

例 10 - RETAIN 節」も参照してください。

集合の解放

保持できる集合数や集合内の ISN の件数については、特別な制限はありません。 ただし、一度に定義する ISN の集合数は、最小限にとどめておくことをお勧めします。 不要になった集合は、RELEASE SETS ステートメントで解放してください。

RELEASE ステートメントで集合を解放しないと、保持された集合は自動的には解放されず、Natural セッション全体を通して存在します。また、別のライブラリにログオンするまで存在します。 あるプログラムで作成した集合を、他のプログラムで処理したり、検索条件を追加してさらにしぼり込んだりするために参照できます。

他のユーザーによる更新処理

保持された集合内の ISN で識別されたレコードは、他のユーザーのアクセスおよび(または)更新をロックすることはありません。 集合からレコードを処理する前に、集合作成時に使用した検索条件が、その時点でも有効であることを確認するには、FIND ステートメントの基本検索条件として WITH 節に集合名を指定し、WHERE 節に元の検索条件(集合作成時に FIND ステートメントで使用した WITH 節の基本検索条件)を指定します。

制限事項

RETAIN 節を使用する場合、SORTED BY 節を一緒に使用しないでください。

WHERE 節

WHERE logical-condition

WHERE 節は、追加の選択条件(logical-condition)を指定するために使用できます。この条件は、値が読み取られた、値に対する処理が実行されるに評価されます(AT BREAK 評価を含む)。

logical-condition の構文については、『プログラミングガイド』の「論理条件基準」を参照してください。

WHERE 節を持つ FIND ステートメントに、処理数制限の指定がある場合、WHERE 節により除かれたレコードは制限数の合計数から除かれます。 しかし、これらのレコードは、Natural セッションパラメータ LTGLOBALS コマンド、LIMIT ステートメントに指定されたグローバルリミットに対しては、合計されます。

例 11 - WHERE 節」も参照してください。

IF NO RECORDS FOUND 節

ストラクチャードモード構文

IF NO   [RECORDS] [FOUND]
 

ENTER
statement

 
END-NOREC

レポーティングモード構文

IF NO [RECORDS] [FOUND]

ENTER
statement
DO statement DOEND

IF NO RECORDS FOUND 節を使用すると、WITH 節および WHERE 節で指定された選択条件を満たすレコードがない場合でも、FIND ステートメントで始まる処理ループに入ります。

IF NO RECORDS FOUND 節は、WITH および WHERE 条件の指定を満たすレコードがない場合、1 回だけ"空"のレコードの FIND 処理ループを実行します。 これが望ましくない場合は、IF NO RECORDS FOUND 節に ESCAPE BOTTOM ステートメントを指定します。

1つ以上のステートメントが IF NO RECORDS FOUND 節で指定されると、処理ループに入る直前にこれらのステートメントが実行されます。 ループに入る前に実行するステートメントがない場合は、キーワード ENTER を使用する必要があります。

例 12 - IF NO RECORDS FOUND 節」も参照してください。

データベース値

IF NO RECORDS FOUND 節内のステートメントで値が割り当てられない限り、Natural はループで指定されたファイルを参照するすべてのデータベースフィールドをリセットして空にします。

システム機能の評価

Natural システム機能は、IF NO RECORDS FOUND 節の結果として処理用に作成される空のレコードに対して 1 回評価されます。

制限事項

この節は、FIND FIRSTFIND NUMBER、および FIND UNIQUE オプションでは使用できません。

Top of page

FIND NUMBER の例(FNDNUM プログラム)も参照してください。

例 1 - PASSWORD節

** Example 'FNDPWD': FIND (with PASSWORD clause)                        
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
  2 PERSONNEL-ID                                                        
*                                                                       
1 #PASSWORD (A8)                                                        
END-DEFINE                                                              
*                                                                       
INPUT 'ENTER PASSWORD FOR EMPLOYEE FILE:' #PASSWORD (AD=N)              
LIMIT 2                                                                 
*                                                                       
FIND EMPLOY-VIEW PASSWORD = #PASSWORD                                   
                 WITH NAME = 'SMITH'                                    
  DISPLAY NOTITLE NAME PERSONNEL-ID                                     
END-FIND                                                                
*                                                                       
END

プログラム FNDPWD の出力:

ENTER PASSWORD FOR EMPLOYEE FILE:

例 2 - CIPHER 節

** Example 'FNDCIP': FIND (with PASSWORD/CIPHER clause)                 
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
  2 PERSONNEL-ID                                                        
*                                                                       
1 #PASSWORD (A8)                                                        
1 #CIPHER   (N8)                                                        
END-DEFINE                                                              
*                                                                       
LIMIT 2                                                                 
INPUT 'ENTER PASSWORD FOR EMPLOYEE FILE:   ' #PASSWORD (AD=N)           
    / 'ENTER CIPHER KEY FOR EMPLOYEE FILE: ' #CIPHER   (AD=N)           
*                                                                       
FIND EMPLOY-VIEW PASSWORD = #PASSWORD                                              
                 CIPHER   = #CIPHER                  
                 WITH NAME = 'SMITH'                                    
  DISPLAY NOTITLE NAME PERSONNEL-ID                                     
END-FIND  
*         
END Output of Program FNDCIP:
ENTER PASSWORD FOR EMPLOYEE FILE:                    
ENTER CIPHER KEY FOR EMPLOYEE FILE:

例 3 - WITH 節の基本検索条件

FIND STAFF WITH NAME = 'SMITH'
FIND STAFF WITH CITY NE 'BOSTON'
FIND STAFF WITH BIRTH = 610803
FIND STAFF WITH BIRTH = 610803 THRU 610811
FIND STAFF WITH NAME = 'O HARA' OR = 'JONES' OR = 'JACKSON'   
FIND STAFF WITH PERSONNEL-ID = 100082 THRU 100100
                                 BUT NOT 100087 THRU 100095

例 4 - マルチプルバリューフィールドの基本検索条件

基本検索条件に使用するディスクリプタが MU のとき、基本的に 4 種類の異なる結果を取得できます。次の例では、MU-FIELD は MU とします。

FIND XYZ-VIEW WITH MU-FIELD = 'A'

MU-FIELDいずれかのオカレンスで A 値を持っているレコードが選択されます。

FIND XYZ-VIEW WITH MU-FIELD NOT EQUAL 'A'

MU-FIELDいずれかのオカレンスで A 以外の値を持っているレコードが選択されます。

FIND XYZ-VIEW WITH NOT MU-FIELD NOT EQUAL 'A'

MU-FIELDすべてのオカレンスで A 値を持っているレコードが選択されます。

FIND XYZ-VIEW WITH NOT MU-FIELD = 'A'

MU-FIELD のすべてのオカレンスで A 以外の値を持っているレコードが選択されます。

例 5 - WITH 節のさまざまな複合検索式の例

FIND STAFF WITH BIRTH LT 19770101 AND DEPT = 'DEPT06'
FIND STAFF WITH JOB-TITLE = 'CLERK TYPIST'
                    AND (BIRTH GT 19560101 OR LANG = 'SPANISH')
FIND STAFF WITH JOB-TITLE = 'CLERK TYPIST'
                    AND NOT (BIRTH GT 19560101 OR LANG = 'SPANISH')
FIND STAFF WITH DEPT = 'ABC' THRU 'DEF'
                    AND CITY = 'WASHINGTON' OR = 'LOS ANGELES'
                    AND BIRTH GT 19360101
FIND CARS WITH MAKE = 'VOLKSWAGEN'
                   AND COLOR = 'RED' OR = 'BLUE' OR = 'BLACK'

例 6 - データベース配列のさまざまな使用例

次の例では、SALARY を PE に属するディスクリプタ、LANG を MU であるとします。

FIND EMPLOYEES WITH SALARY LT 20000

SALARY の全オカレンスを検索します。

FIND EMPLOYEES WITH SALARY (1) LT 20000

SALARY の第 1 オカレンスだけを検索します。

FIND EMPLOYEES WITH SALARY (1:4) LT 20000    /* invalid

検索条件に使用されている PE 内のフィールドに範囲を指定しないでください。

FIND EMPLOYEES WITH LANG = 'FRENCH'

LANG のすべての値を検索します。

FIND EMPLOYEES WITH LANG (1) = 'FRENCH'        /* invalid

検索条件で使用されている MU に添字を指定しないでください。

例 7 - 物理カップリングファイルの使用

** Example 'FNDCPL': FIND (using coupled files)                         
** NOTE: Adabas files must be physically coupled when using the         
**       COUPLED clause without the VIA clause.                         
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 NAME                                                                
1 VEHIC-VIEW VIEW OF VEHICLES                                           
  2 MAKE                                                                
END-DEFINE                                                              
*                                                                       
FIND EMPLOY-VIEW WITH CITY = 'FRANKFURT'                                
     AND COUPLED TO                                                     
     VEHIC-VIEW WITH MAKE = 'VW'                             
  DISPLAY NOTITLE NAME                                                  
END-FIND                                                                
*                                                                       
END

例 8 - VIA 節の使用

** Example 'FNDVIA': FIND (with VIA clause)                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 FIRST-NAME                                                          
1 VEHIC-VIEW VIEW OF VEHICLES                                           
  2 PERSONNEL-ID                                                        
END-DEFINE                                                              
*                                                                       
FIND EMPLOY-VIEW WITH NAME = 'ADKINSON'                                 
     AND COUPLED TO VEHIC-VIEW                                          
     VIA PERSONNEL-ID = PERSONNEL-ID WITH MAKE = 'VOLVO'    
  DISPLAY PERSONNEL-ID NAME FIRST-NAME                                  
END-FIND                                                                
*                                                                       
END

プログラム FNDVIA の出力:

Page      1                                                  05-01-17  13:18:22
  
PERSONNEL         NAME              FIRST-NAME
   ID
--------- -------------------- --------------------
  
20011000  ADKINSON             BOB

例9 - SORTED BY 節

** Example 'FNDSOR': FIND (with SORTED BY clause)                       
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 NAME                                                                
  2 FIRST-NAME                                                          
  2 PERSONNEL-ID                                                        
END-DEFINE                                                              
*                                                                       
LIMIT 10                                                                
FIND EMPLOY-VIEW WITH CITY = 'FRANKFURT'                                
                 SORTED BY NAME PERSONNEL-ID
                     
  DISPLAY NOTITLE NAME (IS=ON) FIRST-NAME PERSONNEL-ID                  
END-FIND                                                                
*                                                                       
END

プログラム FNDSOR の出力:

        NAME              FIRST-NAME      PERSONNEL
                                             ID    
-------------------- -------------------- ---------
                                                   
BAECKER              JOHANNES             11500345 
BECKER               HERMANN              11100311 
BERGMANN             HANS                 11100301 
BLAU                 SARAH                11100305 
BLOEMER              JOHANNES             11200312 
DIEDRICHS            HUBERT               11600301 
DOLLINGER            MARGA                11500322 
FALTER               CLAUDIA              11300311 
                     HEIDE                11400311 
FREI                 REINHILD             11500301

例 10 - RETAIN 節

** Example 'RELEX1': FIND (with RETAIN clause and RELEASE statement)    
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 BIRTH                                                               
  2 NAME                                                                
*                                                                       
1 #BIRTH (D)                                                            
END-DEFINE                                                              
*                                                                       
MOVE EDITED '19400101' TO #BIRTH (EM=YYYYMMDD)                          
*                                                                       
FIND NUMBER EMPLOY-VIEW WITH BIRTH GT #BIRTH                            
     RETAIN AS 'AGESET1'                                         
IF *NUMBER = 0                                                          
  STOP                                                                  
END-IF                                                                  
*                                                                       
FIND EMPLOY-VIEW WITH 'AGESET1' AND CITY = 'NEW YORK'
  DISPLAY NOTITLE NAME CITY BIRTH (EM=YYYY-MM-DD)    
END-FIND                                             
*                                                    
RELEASE SET 'AGESET1'                                
*                                                    
END

例 10 の出力:

        NAME                 CITY            DATE   
                                              OF    
                                            BIRTH   
-------------------- -------------------- ----------
                                                    
RUBIN                NEW YORK             1945-10-27
WALLACE              NEW YORK             1945-08-04

例 11 - WHERE 節

** Example 'FNDWHE': FIND (with WHERE clause)                           
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 JOB-TITLE                                                           
  2 CITY                                                                
END-DEFINE                                                              
*                                                                       
FIND EMPLOY-VIEW WITH CITY = 'PARIS'                                    
                 WHERE JOB-TITLE = 'INGENIEUR COMMERCIAL'       
  DISPLAY NOTITLE                                                       
          CITY JOB-TITLE PERSONNEL-ID NAME                              
END-FIND                                                                
*                                                                       
END

プログラム FNDWHE の出力:

        CITY                  CURRENT          PERSONNEL         NAME        
                             POSITION             ID                         
-------------------- ------------------------- --------- --------------------
                                                                             
PARIS                INGENIEUR COMMERCIAL      50007300  CAHN                
PARIS                INGENIEUR COMMERCIAL      50006500  MAZUY               
PARIS                INGENIEUR COMMERCIAL      50004700  FAURIE              
PARIS                INGENIEUR COMMERCIAL      50004400  VALLY               
PARIS                INGENIEUR COMMERCIAL      50002800  BRETON              
PARIS                INGENIEUR COMMERCIAL      50001000  GIGLEUX             
PARIS                INGENIEUR COMMERCIAL      50000400  KORAB-BRZOZOWSKI   

例 12 - IF NO RECORDS FOUND 節

** Example 'FNDIFN': FIND (using IF NO RECORDS FOUND)                   
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 FIRST-NAME                                                          
1 VEHIC-VIEW VIEW OF VEHICLES                                           
  2 PERSONNEL-ID                                                        
  2 MAKE                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 15                                                                
EMP. READ EMPLOY-VIEW BY NAME STARTING FROM 'JONES'                     
  /*                                                                    
  VEH. FIND VEHIC-VIEW WITH PERSONNEL-ID = PERSONNEL-ID (EMP.)          
    
    IF NO RECORDS FOUND                                                 
      MOVE '*** NO CAR ***' TO MAKE                                     
    END-NOREC                                                    
    /*                               
    DISPLAY NOTITLE                  
            NAME (EMP.) (IS=ON)      
            FIRST-NAME (EMP.) (IS=ON)
            MAKE (VEH.)              
  END-FIND                           
  /*                                 
END-READ                             
END                                 

プログラム FNDIFN の出力:

        NAME              FIRST-NAME              MAKE        
-------------------- -------------------- --------------------
                                                              
JONES                VIRGINIA             CHRYSLER            
                     MARSHA               CHRYSLER            
                                          CHRYSLER            
                     ROBERT               GENERAL MOTORS      
                     LILLY                FORD                
                                          MG                  
                     EDWARD               GENERAL MOTORS      
                     MARTHA               GENERAL MOTORS      
                     LAUREL               GENERAL MOTORS      
                     KEVIN                DATSUN              
                     GREGORY              FORD                
JOPER                MANFRED              *** NO CAR ***      
JOUSSELIN            DANIEL               RENAULT             
JUBE                 GABRIEL              *** NO CAR ***      
JUNG                 ERNST                *** NO CAR ***      
JUNKIN               JEREMY               *** NO CAR ***      
KAISER               REINER               *** NO CAR ***     

例 13 - FIND ステートメントで使用可能な Natural システム変数

** Example 'FNDVAR': FIND (using *ISN, *NUMBER, *COUNTER)               
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 CITY                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 3                                                                 
FIND EMPLOY-VIEW WITH CITY = 'MADRID'                                   
  DISPLAY NOTITLE PERSONNEL-ID NAME                                     
                  *ISN *NUMBER *COUNTER                                 
END-FIND                                                         
*                                                                       
END

プログラム FNDVAR の出力

PERSONNEL         NAME            ISN         NMBR        CNT     
   ID                                                             
--------- -------------------- ----------- ----------- -----------
                                                                  
60000114  DE JUAN                      400          41           1
60000136  DE LA MADRID                 401          41           2
60000209  PINERO                       405          41           3

例 14 - 複数の FIND ステートメント

EMPLOYEES ファイルを FIND し、姓が SMITH である人をすべて選択します。 この EMPLOYEES ファイルの PERSONNEL-ID を検索キーにして、VEHICLES ファイルをアクセスします。

** Example 'FNDMUL': FIND (with multiple files)                         
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 PERSONNEL-ID                                                        
  2 NAME                                                                
  2 FIRST-NAME                                                          
1 VEHIC-VIEW VIEW OF VEHICLES                                           
  2 PERSONNEL-ID                                                        
  2 MAKE                                                                
END-DEFINE                                                              
*                                                                       
LIMIT 15                                                                
EMP. FIND EMPLOY-VIEW WITH NAME = 'SMITH'                           
  /*                                                                    
  VEH. FIND VEHIC-VIEW WITH PERSONNEL-ID = EMP.PERSONNEL-ID       
    IF NO RECORDS FOUND                                                 
      MOVE '*** NO CAR ***' TO MAKE                                     
    END-NOREC                                                           
    DISPLAY NOTITLE               
            EMP.NAME (IS=ON)      
            EMP.FIRST-NAME (IS=ON)
            VEH.MAKE              
  END-FIND                        
END-FIND                          
END                              

プログラム FNDMUL の出力:

レポートに表示されるのは、姓が SMITH であるすべての人の NAMEFIRST-NAME(姓名)(EMPLOYEES ファイルより入手)および彼らの所有する車の MAKE(型)(VEHICLES ファイルより入手)です。

        NAME              FIRST-NAME              MAKE        
-------------------- -------------------- --------------------
                                                              
SMITH                GERHARD              ROVER               
                     SEYMOUR              *** NO CAR ***      
                     MATILDA              FORD                
                     ANN                  *** NO CAR ***      
                     TONI                 TOYOTA              
                     MARTIN               *** NO CAR ***      
                     THOMAS               FORD                
                     SUNNY                *** NO CAR ***      
                     MARK                 FORD                
                     LOUISE               CHRYSLER            
                     MAXWELL              MERCEDES-BENZ       
                                          MERCEDES-BENZ       
                     ELSA                 CHRYSLER            
                     CHARLY               CHRYSLER            
                     LEE                  *** NO CAR ***      
                     FRANK                FORD               

Top of page