DBSHORT - データベースフィールドショートネームの解釈

この Natural プロファイルおよびセッションパラメータを使用すると、データベースフィールドショートネームの解釈を指定できます。このパラメータは、Natural システムコマンド COMPOPT のオプション DBSHORT に対応します。

DDM に定義されるデータベースフィールドは、次の 2 種類の名前で記述されます。

  • ショートネーム。長さ 2 文字で、Natural によってデータベース(特に Adabas)との通信に使用されます。

  • ロングネーム。長さ 3~32 文字(基盤となるアクセス対象データベースタイプが DB2/SQL の場合は 1~32 文字)で、Natural プログラミングコード内のフィールドへの参照に使用されます。

特別な状況下では、Natural プログラム内のデータベースフィールドへの参照に、ロングネームの代わりにショートネームを使用できます。このことは、Natural Security なしでレポーティングモードで実行している場合、およびデータベースアクセスステートメントにビューへの参照ではなく DDM への参照が含まれている場合に当てはまります。

フィールド名がショートネーム参照とみなされるかどうかは、名前の長さによって判断されます。フィールド識別子が 2 文字の場合は、ショートネーム参照とみなされます。それ以外の長さのフィールド名は、ロングネーム参照とみなされます。データベースフィールドに関するこのような標準解釈ルールを追加で指定および制御するには、コンパイラオプション DBSHORTON または OFF に設定します。

可能な設定 ON ショートネームは、データベースフィールドの参照に使用できます。

ただし、DBSHORT=ON が設定されている場合でも、次のような場合には、通常、データベースショートネームは使用できません

  • ビューを作成するとき、フィールドの定義に使用する場合

  • DEFINE DATA LOCAL ステートメントが指定されている場合、

  • Natural Security で実行されている場合

OFF データベースフィールドの参照には、ロングネームのみを使用できます。各データベースのフィールド識別子は、文字数に関係なく、ロングネームの参照であるとみなされます。

2 文字の名前が指定されており、この名前がロングネームではなくショートネームとしてのみ見つかる場合は、コンパイル時に構文エラー NAT0981 が発生します。

これにより、DDM に定義されている識別子長が 2 バイトのロングネームを使用できるようになります。この DDM を使用してアクセスする、基盤となるデータベースが SQL(DB2)であり、かつ、名前の長さが 2 文字のテーブル列が存在する場合、このオプションを指定する必要があります。ただし、Adabas など、他のすべてのデータベースタイプについては、名前の長さが 2 バイトのロングフィールドを定義しようすると、DDM の生成時に拒否されます。

また、ショートネーム参照が使用されていない場合(DBSHORT=OFF によって強制的に設定できます)、プログラムは Natural Security なしでコンパイルされたかどうかに無関係になります。

デフォルト設定 ON  
ダイナミックな指定
セッション内の指定
適用可能なステートメント OPTIONS
適用可能なコマンド 以下の DBSHORT オプション: COMPOPT

例:

DDM EMPLOYEES に以下のデータベースフィールド定義がある場合を考えます。

Short Name Long Name
AA PERSONNEL-ID

例 1

OPTIONS DBSHORT=ON
READ EMPLOYEES 
  DISPLAY AA      /* data base short name AA is allowed
END

例 2

OPTIONS DBSHORT=OFF
READ EMPLOYEES 
  DISPLAY AA      /* syntax error NAT0981, because DBSHORT=OFF
END

例 3:

OPTIONS DBSHORT=ON
DEFINE DATA LOCAL
1 V1 VIEW OF EMPLOYEES
  2  PERSONNEL-ID
END-DEFINE
READ V1 BY PERSONNEL-ID 
  DISPLAY AA     /* syntax error NAT0981, because PERSONNEL-ID is defined in view;
                 /* (even if DBSHORT=ON)
END-READ
END