DEFINE DATA ステートメントの使用と構造

Natural プログラム内にストラクチャードモードで記述されている最初のステートメントは常に、プログラムで使用するフィールドを定義するために使用される DEFINE DATA ステートメントである必要があります。

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

ソースプログラムのインデントについては、Natural システムコマンド STRUCT の説明を参照してください。


DEFINE DATA ステートメントにおけるフィールド定義

DEFINE DATA ステートメントで、プログラムで使用するすべてのフィールド(ユーザー定義変数およびデータベースフィールド)を定義します。

フィールドを定義するには、以下の 2 つの方法があります。

複数のプログラム/ルーチンでフィールドを使用する場合は、プログラム外のデータエリアで定義する必要があります。

アプリケーション構造を明確にするために、通常はプログラム外のデータエリアにフィールドを定義することをお勧めします。

データエリアは、『エディタ』ドキュメントで説明されている「データエリアエディタ」で作成およびメンテナンスします。

以下の最初の例では、プログラムの DEFINE DATA ステートメント内でフィールドを定義しています。2 番目の例では、同じフィールドをローカルデータエリア(LDA)で定義し、DEFINE DATA ステートメントではそのデータエリアへの参照だけを指定しています。

DEFINE DATA ステートメント内でのフィールド定義

以下の例は、DEFINE DATA ステートメント内でのフィールドの定義方法を示しています。

DEFINE DATA LOCAL 
1 VIEWEMP VIEW OF EMPLOYEES 
  2 NAME 
  2 FIRST-NAME 
  2 PERSONNEL-ID 
1 #VARI-A (A20) 
1 #VARI-B (N3.2) 
1 #VARI-C (I4) 
END-DEFINE 
...

別のデータエリアでのフィールドの定義

以下の例は、ローカルデータエリア(LDA)でのフィールドの定義方法を示しています。

プログラム:

DEFINE DATA LOCAL 
  USING LDA39 
END-DEFINE 
... 

ローカルデータエリア LDA39

I T L Name                             F Leng Index/Init/EM/Name/Comment       
- - - -------------------------------- - ---- ---------------------------------
  V 1 VIEWEMP                                 EMPLOYEES    
    2 NAME                             A   20                           
    2 FIRST-NAME                       A   20
    2 PERSONNEL-ID                     A    8                   
    1 #VARI-A                          A   20
    1 #VARI-B                          N  3.2
    1 #VARI-C                          I    4
 

レベル番号を使用した DEFINE DATA ステートメントの構造化

以下のトピックについて説明します。

定義の構造化およびグループ化

レベル番号は、定義の構造およびグループ化を示すために、DEFINE DATA ステートメント内で使用します。これは以下に関連します。

レベル番号は、01~99 の範囲内の 1 桁または 2 桁の数字です(先頭の 0 は任意)。

一般的に、変数定義はレベル 1 です。

ビュー定義、再定義、およびグループでのレベル番号は、連続している必要があります。レベル番号はスキップできません。

ビュー定義のレベル番号

ビューを定義する場合、ビュー名はレベル 1、ビューを構成するフィールドはレベル 2 で指定する必要があります。ビュー定義の詳細については、データベースアクセスの説明を参照してください。

ビュー定義のレベル番号の例:

DEFINE DATA LOCAL 
1 VIEWEMP VIEW OF EMPLOYEES 
  2 NAME 
  2 FIRST-NAME 
  2 BIRTH 
... 
END-DEFINE

フィールドグループのレベル番号

グループを定義すると、連続する一連のフィールドを簡単に参照できます。共通のグループ名の下に複数のフィールドを定義すると、後で、個々のフィールド名の代わりにグループ名のみを指定することによって、プログラム内でフィールドを参照できます。

グループ名はレベル 1 で指定し、グループに含まれるフィールドは 1 つ低いレベルにする必要があります。

グループ名には、ユーザー定義変数と同じ命名規則が適用されます。

グループのレベル番号の例:

DEFINE DATA LOCAL 
1 #FIELDA (N2.2) 
1 #FIELDB (I4) 
1 #GROUPA 
  2 #FIELDC (A20) 
  2 #FIELDD (A10) 
  2 #FIELDE (N3.2)
1 #FIELDF (A2) 
... 
END-DEFINE 

この例では、フィールド #FIELDC#FIELDD、および #FIELDE は、共通のグループ名 #GROUPA の下に定義されています。他の 3 つのフィールドはグループの一部ではありません。#GROUPA はグループ名として機能するだけで、それ自体はフィールドではないことに注意してください(したがって、フォーマット/長さ定義を持っていません)。

再定義のレベル番号

フィールドを再定義する場合、REDEFINE オプションは元のフィールドと同じレベルにする必要があります。再定義から作成するフィールドは、1 つ低いレベルにする必要があります。再定義の詳細については、「フィールドの再定義」を参照してください。

再定義のレベル番号の例:

DEFINE DATA LOCAL 
1 VIEWEMP VIEW OF STAFFDDM 
  2 BIRTH 
  2 REDEFINE BIRTH 
    3 #YEAR-OF-BIRTH  (N4) 
    3 #MONTH-OF-BIRTH (N2) 
    3 #DAY-OF-BIRTH   (N2) 
1 #FIELDA (A20) 
1 REDEFINE #FIELDA 
  2 #SUBFIELD1 (N5) 
  2 #SUBFIELD2 (A10) 
  2 #SUBFIELD3 (N5) 
...  
END-DEFINE 

この例では、データベースフィールド BIRTH は、3 つのユーザー定義変数として再定義され、ユーザー定義変数の #FIELDA は、他の 3 つのユーザー定義変数として再定義されています。