今更ではありますが、AS400の物理ファイルのフィールドの定義で設定できる「デフォルト値」について検証してみました。
まずはテスト用として、下記のようなテーブルを準備。
SECTIONS.pf
A UNIQUE A R RECSEC TEXT(' 部門マスタ ') A* (FIELDS) A ACTIVE_FLG 1A COLHDG(' 有効フラグ ') A DFT('1') A SEC_CD 2A COLHDG(' 部門 CD') A SEC_NAME 20O COLHDG(' 部門名 ') A CREATE_TS Z COLHDG(' 作成日時 ') A* (KEY) A K SEC_CD
「ACTIVE_FLG」という項目に、DFTキーワード(フィールドに省略時の値を提供する)を追加し、その初期値が '1' になるように設定しています。
次に、RPGとSQLそれぞれで、追加する命令を使って動きを試してみます。
SAMPLE43.rpgle
F******************************************************* F* FILE 定義 F******************************************************* F* 部門マスタ FSECTIONS UF A E K DISK F* D******************************************************* D* PROTOTYPE/INTERFACE D******************************************************* D MAIN PR EXTPGM('SAMPLE43') D MAIN PI D* C******************************************************* C* MAIN C******************************************************* C EXSR #MAIN C EXSR #FINAL /FREE //**************************************************** //* MAIN //*************************************************** BEGSR #MAIN; SEC_CD = '03'; SEC_NAME = '企画部'; WRITE RECSEC; CLEAR RECSEC; SEC_CD = '04'; SEC_NAME = '品質部'; CREATE_TS = %TIMESTAMP(); WRITE RECSEC; ENDSR; //*************************************************** //* FINALIZE //*************************************************** BEGSR #FINAL; *INLR = *ON; RETURN; ENDSR; /END-FREE
CALL TIGEROBJ/SAMPLE43
SQL
INSERT INTO TIGERDB.SECTIONS( SEC_CD, SEC_NAME ) VALUES( '10', ' 検査部 ' );
書き込み結果
下記の通りの結果になりました。
ACTIVE_FLG | SEC_CD | SEC_NAME | CREATE_TS | 書き込み方法 |
---|---|---|---|---|
03 | 企画部 | 0001-01-01-00.00.00.000000 | RPGLEで書き込み | |
04 | 品質部 | 2023-04-12-17.50.25.502615 | RPGLEで書き込み(CLEAR命令後) | |
1 | 10 | 検査部 | 2023-04-12-17.52.54.905833 | SQLで書き込み |
RPGLEからのWRITE命令では、DFTオプションが機能しませんでした。
SQLでは、対象フィールドを省略したことで、DFTの値が自動的にセットされています。 ついにで、省略したTimeStampの項目には、実行時のシステム日時がセット。
RPGLEでWRITE文で行う場合、DFTキーワードが機能しないことがわかりました。 RPGLEで実装する場合、SQLでやることでDFTの恩恵を受けることができそうです。
以上今回は、簡単な検証結果のシェアでした。