DataTable のプロパティー

各 DataTable パーツは、それぞれ独自の EGL ソース・ファイルに定義されます。 このファイルには、以下のプロパティーを指定することができます。 contents プロパティーのみが必要です。

alias
生成された出力の名前に取り込まれる (引用符で囲まれた) ストリング。 alias (別名) を指定しない場合は、代わりに DataTable 名が使用されます。
contents
DataTable セルの値の配列。配列の各行は、表の 1 行を示しています。 各行は、列定義で指定されているようにフォーマット設定されています。 各値は、以下のリテラル型のいずれかです。
  • 数値リテラル
  • ストリング・リテラル、またはストリング・リテラルの連結
  • ブール・リテラル (YES または NO、TRUE または FALSE)
行のコンテンツ・タイプには、最上位の列定義との互換性が必要です。
resident
DataTable にアクセスしたすべてのプログラムが終了した後、その DataTable をメモリー内に保持しておくかどうかを示すブール値。有効な値は YES と NO (デフォルト) です。 resident プロパティーを YES に設定した場合、 shared プロパティーの値とは無関係に、DataTable が共用されます。 DataTable の常駐には、以下のような利点があります。
  • 前に実行されたプログラムによって書き込まれた値の保存。
  • 追加のロード処理を要しない即時アクセスの可用性。
resident が NO に設定されている場合、次の要因が表のアンロードに 影響を与えます。
  • VAGen 互換モードで実行していない場合、プログラムが終了すると、 DataTable がアンロードされます。
  • VAGen 互換モードで実行している場合、 DataTable では use ステートメントの deleteAfterUse プロパティーで、 DataTable のアンロードをコントロールします。『deleteAfterUse』を参照してください。
DataTable のアンロードは、ターゲット・システム、およびプログラムが常駐であるかどうかによっても影響を受けます。 このトピックの『互換性』を参照してください。
注: DataTable は、EGL ランタイムがその use 文を処理するときではなく、最初のプログラム・アクセス時にメモリーにロードされます。
shared
同じ実行単位内のすべてのプログラムが DataTable の同一インスタンスを使用しているかどうかを示すブール値。shared が YES に 設定されている場合、実行単位内のすべてのプログラムは DataTable の同一コピーを共有します。 shared が NO (デフォルト) に設定されている場合、実行単位内の各プログラム には DataTable の固有のコピーがあります。

互換性

表 1. DataTable プロパティーの互換性に関する考慮事項
プラットフォーム 問題
COBOL 生成 生成される名前の最大長は 7 文字です。
CICS®

DataTable の resident プロパティーを YES に設定した場合、DataTable プログラムの CICS RDO PROGRAM 定義に関する RESIDENT キーワードを YES に設定しないでください。

常駐 DataTable は、以下のいずれかが起きるまで ロードされたままになります。
  • CICS 領域が 停止する。
  • IBM® Rational® COBOL Runtime for zSeries で、管理者が、new copy ユーティリティーを使用することによって表を更新する。
new copy ユーティリティーを使用する場合、既にアクティブで、かつ、表がロードされているトランザクションは、トランザクションの表の使用回数がゼロに設定されるまで、古いコピーの表を使い続けます。 そのコピーを使用するプログラムがこれ以上なくなると、古いコピーが削除されます。

shared プロパティーは、CICS 領域のすべてのプログラム、および所定の実行単位内のすべてのプログラムが、DataTable の同じインスタンスを使用するかどうかを示します。 共用テーブルを変更すると、このテーブルが再ロードされるまで、同じ CICS 領域内の共用テーブルのすべてのユーザーに対して変更が有効になります。

ご使用のプログラムが共用テーブルを更新したら、 I/O ステートメント間、あるいはプログラム、ライブラリー、サービス呼び出しの間で全体を更新します。 I/O ステートメントまたは呼び出しの前に DataTable から値を取得して、 I/O ステートメントまたは call ステートメントの後に、 取得した値に基づいて DataTable を変更しないようにしてください。他のユーザーのトランザクションが、 I/O ステートメントまたは call ステートメントのコントロールを取得して、 更新操作の最中に同じテーブルを更新した可能性があります。 I/O ステートメントまたは call ステートメントにわたって同期が必要な場合、 外部直列化方式を使用します。

IMS BMP
z/OS バッチ

常駐 DataTable は、以下のいずれかの状態が起きるまで ロードされたままになります。
  • メインプログラムが終了する (システムに戻る)。
  • メインプログラムが transfer to transaction ステートメントを使用する。
  • メインプログラムが transfer to program ステートメントを使用して 非 EGL プログラムへ転送する。
  • 呼び出し先プログラムが非 EGL プログラムに戻る。

resident プロパティーが NO に設定されている場合、 shared プロパティーが無視されます。各ジョブ・ステップには、 テーブルの別々のコピーがあります。

IMS/VS
常駐 DataTable は、以下のいずれかの状態が起きるまで ロードされたままになります。
  • メインの基本プログラムが終了する (システムに戻る)。
  • メインの textUI プログラムが、入力メッセージ・キュー内のすべてのメッセージの処理を終了する。
  • 呼び出し先プログラムが非 EGL プログラムに戻る。

共用 DataTables の変更はサポートされていません。

iSeries® COBOL
常駐 DataTable は、以下のいずれかの状態が起きるまで ロードされたままになります。
  • メインプログラムが終了する (システムに戻る)。
  • メインプログラムが transfer to transaction ステートメントを使用する。
  • メインプログラムが transfer to program ステートメントを使用して 非 EGL プログラムへ転送する。
  • 呼び出し先プログラムが非 EGL プログラムに戻る。
Java™ 生成 resident DataTable は、実行単位が終了するまでロードされたままになります。 しかし、非常駐の DataTable は、それを使用するプログラムが終了するとともにアンロードされます。
JavaScript 生成 DataTable はサポートされていません。

フィードバック