(1)データ域とは?
- プログラム間、JOB間の制御情報として使用されるディスク上の記憶域。1つのオブジェクト。データ・エリア(DataArea)とも呼ぶ。
- データ域は、次の2種類あります。
- ユーザー定義のデータ域
- ユーザーが作成するデータ域で、任意のライブラリーに作成でき、複数のジョブで利用可能。
- ローカル・データ域(*LDA)
- ジョブの開始時にシステムが自動的に作成し、ジョブの終了時にシステムが自動的に削除するデータ域。同一ジョブ内のプログラム間の受け渡しに使用できる。(サインオンユーザーのみが利用可能。)
(2)データ域管理コマンド
① ユーザー定義のデータ域
作成
CRTDTAARA DTAARA(TIGEROBJ/TSDT) TYPE(*CHAR) LEN(26) TEXT(‘ テスト用 DTAARA’)
表示
DSPDTAARA DTAARA(TSDT)
変更
CHGDTAARA DTAARA(TSDT (11 5)) VALUE(’12345′) ※11桁目より、5桁分の値を変更せよ。
削除
DLTDTAARA DTAARA(TSDT)
登録済みデータ域の確認方法
STRPDMコマンド → 2. オブジェクトの処理 ※タイプ=*DTAARA で検索(データ域はオブジェクト)
② ローカル・データ域
表示
DSPDTAARA DTAARA(*LDA)
(3)データ域とローカル・データ域の比較
項目 | データ域 | ローカルデータ域 |
---|---|---|
作成 | ユーザー | 自動的 |
削除 | ユーザー | 自動的 |
ライブラリー | 任意 | なし |
タイプ | *CHAR(文字) 2000桁 *DEC(数字) 24桁 *LGL(論理値)‘0’or‘1’ |
文字 1024桁 |
他のJOBからの使用 | 可能 | 不可能 |
名前 | 任意 | *LDA |
(4)RPGによるデータ域の処理
① データ域をデータ構造にて定義(UDS)
- 外部データ域の定義の場合、データ構造名は、データ域名と同一とすること。
② データ域とデータ構造の関連付け(DEFINE)
C* B を A の型で定義する C *LIKE DEFINE A B C *DTAARA DEFINE TSDT
③ データ域の演算命令による操作
- IN命令
- データ域の読み込み(項目1=*LOCKでロック、項目1 =ブランクでアン・ロック)
- OUT命令
- データ域の書き出し
- UNLOCK命令
- データ域のロックを任意に解除(※プログラム終了時でロックは解除される)
(5)サンプルプログラム
データ域とローカルデータ域の2つに下記の情報を格納するサンプル。
①JOB名 ②ユーザーID ③JOB番号 ④SYSTEM日付 ⑤SYSTEM時間
H DATEDIT(*YMD/) H* D**************************************************************** D* 変数定義 D**************************************************************** D* PGMデータ定義 D I@SDSD SDS D I@PGID 1 10 // PGM-ID D I@MGID 40 42 // MSG-ID D I@MGNO 43 46 // MSG-NO D I@JBNM 244 253 // JOB-NAME D I@URID 254 263 // USER-ID D I@JBNO 264 0269 0 // JOB-NO D* D* データ構造定義(データ域格納用) D TSDT UDS D W1NJOB 1 10 // ジョブ名 D W1NUSE 11 20 // ユーザー ID D W1BJOB 21 26 0 // ジョブ番号 D W1DATE 27 34 0 // 日付 D W1TIME 35 40 0 // 時間 D* D LDA UDS D W2NJOB 1 10 // ジョブ名 D W2NUSE 11 20 // ユーザー ID D W2BJOB 21 26 0 // ジョブ番号 D W2DATE 27 34 0 // 日付 D W2TIME 35 40 0 // 時間 D* D* ワーク変数 D* C**************************************************************** C* DEFINE FILED C**************************************************************** C* データ域とデータ構造の関連付け C *DTAARA DEFINE TSDT C *DTAARA DEFINE *LDA LDA C* C**************************************************************** C* MAIN-ROUTINE C**************************************************************** C* C* データ域更新 C IN TSDT C EVAL W1NJOB = I@JBNM C EVAL W1NUSE = I@URID C EVAL W1BJOB = I@JBNO C EVAL W1DATE = %DEC(%DATE()) C EVAL W1TIME = %DEC(%TIME()) C OUT TSDT C* C* ローカルデータ域更新 C IN LDA C EVAL W2NJOB = I@JBNM C EVAL W2NUSE = I@URID C EVAL W2BJOB = I@JBNO C EVAL W2DATE = %DEC(%DATE()) C EVAL W2TIME = %DEC(%TIME()) C OUT LDA C* C* 終了処理 C MOVEL *ON *INLR C RETURN