選択/除外の基準

RDMLX ファイルには、選択/除外の定義を使用しないことをお勧めします。その代わり、WHEREパラメータを使用して、取得したデータを限定してください。

論理ビューに含める/含めないレコードを、「選択/除外の基準」として指定することができます。除外されたレコードは、物理ファイル上には存在しても、論理ビューには現れません。選択基準に当てはまらなかった、または除外基準に当てはまったレコードが、除外の対象となります。基準はステートメントを順に並べる形で記述します。

レコードが除外されるのは次のような場合です。

選択/除外の基準は非常に記述能力が高いのですが、物理ファイル中のレコードが一部「不可視」になり、人によっては混乱する場合があるので注意が必要です。

選択/除外の基準は、選択/除外ステートメントを列挙する形で記述します。この記述順序は、条件を評価する順序でもあるので重要です。レコードがある選択/除外ステートメントを満たせば、その時点で選択/除外は確定します。以降のステートメントは評価されません。

LANSAで使用しているタイプのレコードの選択/除外ロジックは、IBM i DDS(データ記述仕様)の方式と同一で、完全に互換性があります。LANSA側の選択/除外基準を、そのままDDS用に変換することさえ可能です。

ただし、ひとつだけ違いがあって、LANSAでは「SELECT」、「OMIT」という完全な綴りを使うようになっています。DDSの場合は、入力フォームの17桁目が「S」か「O」かによって区別します。この点を除き、仕様の上ではまったく同一です。

LANSAの選択/除外基準の実装には、無効な選択/除外ステートメントを指定してもエラーにならない、という問題があります。

もっとも、論理ファイルを実際に作成してみれば、すぐに問題が発覚するでしょう。処理は中断し、正常に論理ファイルを作成できなかった旨がログに記録されます。この場合、生成されたQDDSSRCというソースを調べてください。

まず、どこに問題があったのかを調べます。LANSAが自動生成したDDS選択/除外ステートメントに問題がある場合、該当する論理ファイルをいったん削除してから定義し直し、DDSプロセッサが受け付けるようにしてください。

LANSAの選択/除外ステートメントはDDSのそれと完全に互換性があるので、IBMが発行しているマニュアル『Data Description Specifications』の該当するページや、「CMP」、「COMP」、「RANGE」、「VALUES」、「ALL」といった字句の項目も参考になるでしょう。

次のトピックも参照してください。

LANSA テクニカル リファレンスガイド』の「選択/除外の設定