データ域命令

これらの命令は、従来型の構文と自由形式構文の両方で使用可能です。

IN および OUT 命令では、演算項目 2 の指定によって、プログラム内の 1 つ またはすべてのデータ域の検索および書き出しを行うことができます。

また、IN および OUT 命令では、ユーザーがデータ域のロックやアンロック を制御することもできます。 データ域がロックされている場合には、他のプログラムまたはプロシージャー によって読み取ることはできますが、更新することはできません。

次のロック状態が使用されます。
  • *LOCK が指定された IN 命令の場合には、データ域が読み取り可占有ロック 状態になります。
  • *LOCK が指定された OUT 命令の場合には、データ域は書き出し操作の後で ロックされたままになります。
  • ブランクが指定された OUT 命令の場合には、データ域は更新された後で アンロックされます。
  • データ域をアンロックしてレコードのロックを解除するために UNLOCK を 使用した場合には、データ域またはレコード (あるいはその両方) が更新され ません。

データ域との実際のデータの転送中には、データ域にシステムの内部ロック があります。 複数のユーザーが同じデータ域に対して競合している場合には、ユーザーは、 データ域が使用できないことを示すエラー・メッセージを受け取ります。

IN、OUT、および UNLOCK 命令を使用する場合には、次のことに留意してく ださい。
  • データ域命令は、オペレーティング・システムに定義されていないデータ 域には実行することができません。
  • データ域に対して IN、OUT、および UNLOCK 命令を実行する前に、そのデ ータ域の定義仕様書に DTAARA キーワードを指定するか、または *DTAARA DEFINE ステートメントの結果のフィールドにそのデータ域を指定し なければなりません (DEFINE ステートメントの詳細については、DEFINE (フィールド定義)を参照して ください)。
  • ロックされたデータ域を別の RPG プログラムで更新したりロックすること はできませんが、このデータ域は演算項目 1 をブランクにして IN 命令で検索 することができます。
  • データ域の名前を、複数オカレンス・データ構造、入力レコード・フィールド、 配列、配列要素、またはテーブルの名前にすることはできません。
  • データ域を、複数オカレンス・データ構造、データ域データ構造、プログラム 状況データ構造、ファイル情報データ構造 (INFDS)、または *DTAARA DEFINE ステートメントに現れるデータ構造のサブフィールドにすることはできませ ん。
  • データ域の名前が実行時に判別される場合、 DTAARA(*VAR) キーワードが使用中であるため、その名前を含む変数は IN 命令の実行前に設定する必要があります。 以前に実行した *LOCK IN 命令が原因でデータ域がロックされる場合、そのデータ域に対する他の命令 (IN、OUT、UNLOCK) は、以前にロックされた データ域を使用し、データ域の名前を含む変数を調べません。
  • ライブラリー名が DTAARA キーワードで指定されていない場合には、 データ域を探すためにライブラリー・リストが使用されます。

変更の始まりデータ域データ構造はプログラムの初期化時に自動的に読み取られてロックされ、 プログラムが LR オンで終了したときにデータ構造の内容がデータ域に 書き込まれます。データ域データ構造のためのデータ域が見付からない場合、 初期値としてブランクを使用して、データ域が作成されます。 データ域を見付けるためにライブラリー・リストが検索された場合、 新規データ域は QTEMP 内に作成されます。変更の終わり

変更の始まり自由形式では、DTAARA(*AUTO) キーワードは、データ構造がデータ域データ構造である ことを指定します。 固定形式では、定義仕様の 23 桁目に U を記入して定義された データ構造は、そのデータ構造がデータ域であることを示します。変更の終わり

変更の始まり場合によっては、 IN、OUT、および UNLOCK 命令コードを使用して、データ域に対してさらに命令を指定することができます。 自由形式の定義の場合、パラメーターとして *USRCTL も指定します。 固定形式の定義の場合、DTAARA キーワードを指定します。変更の終わり

データ域データ構造のためのデータ域が見付からない場合、 初期値としてブランクを使用して、データ域が作成されます。 データ域を見付けるためにライブラリー・リストが検索された場合、 新規データ域は QTEMP 内に作成されます。

内部データ域 (*LDA) を定義するために、次のいずれかを行うことができ ます。
  • データ域の定義仕様書に DTAARA(*LDA) キーワードを指定する。
  • 変更の始まりデータ域の固定形式の定義仕様書に UDS を指定し、名前をブランクにする。変更の終わり
  • 変更の始まり自由形式の定義に名前として *N を指定し、名前なしで DTAARA キーワードを指定する。変更の終わり
  • *DTAARA DEFINE ステートメントの演算項目 2 に *LDA を指定する。

*PDA を定義するためには、データ域の定義仕様書に DTAARA(*PDA) キーワー ドを指定するか、あるいは *DTAARA DEFINE ステートメントの演算項目 2 に *PDA を指定することができます。