Files
cobol-tna-system/詳細設計書/詳細設計書_JIN05UPD.md
T

7.0 KiB
Raw Blame History

JIN05UPD 詳細設計書

プログラム概要

項目 内容
プログラムID JIN05UPD(人事→JINji, 05, 人事異動DB更新→UPD
プログラムタイプ 09DB更新)
機能 HR-TRANS(人事異動トランザクション)を読込み、DB2 EMPLOYEEテーブルをINSERT/UPDATEする
CALL方式 メインプログラム(JCLからCALL
DBアクセス DB2 EMPLOYEECONNECT / INSERT / UPDATE
使用サブプログラム SUB01DAT(日付), SUB02MSG(メッセージ), SUB03END(アベンド)

前提条件

NO 対象ファイル 条件
1 HR-TRANS JCL の SORT で社員番号昇順に並替済であること

使用ファイル一覧

NO 使用ファイル名 識別子 DD名 I/O COPY群 形式 レコード長 媒体 備考
1 HR-TRANS R01 JIN05R01 I JIN05REC FB 200 PS 人事異動トランザクション
2 VALID-ERROR W01 JIN05W01 O (内約80B FB 80 PS エラー退避

補足:VALID-ERROR レコードは COPY を使用せず WORKING-STORAGE/W01OUTREC に内約定義(PROGRAMID 8B + EMP-ID 8B + CODE 4B + DETAIL 60B = 80B)。ID 設計上 COPY VALID-ERROR-REC を使用していない。将来は COPY 化推奨。

DB 使用一覧

NO テーブル I/O 内容
1 EMPLOYEE I/U 人事異動の新規登録(INSERT)/ 更新(UPDATE

使用モジュール一覧

NO 機能 プログラムID 使用COPY名
1 運用日付取得SUB SUB01DAT JINDATAC
2 メッセージ編集出力SUB SUB02MSG JINMSGAC
3 ABEND処理SUB SUB03END JINENDAC

処理詳細

段落一覧(SOR規約名)

段落名 機能
0000MAJCOLSOR メインコントロール(初期→読込→DB更新ループ→終了)
1000ITTSOR 初期処理(開始表示・初期化・運用日付・CONNECT・OPEN・初回読込)
2000MAINSOR 主処理(ホスト変数転記→種別判定→対応処理)
2100READSOR R01読込・EOF判定
3100INSERTSOR INSERT処理(新規社員追加)
3200UPDATESOR UPDATE処理(既存社員更新)
3300ERRSOR 不明トランザクション→VALID-ERROR出力
3400DBERRSOR DBエラー(SQLCODE≠0)→VALID-ERROR出力
4000STPSOR 終了処理(統計表示・CLOSE・終了メッセージ)
9000ERRSOR エラー処理(ABEND

処理フロー

1. 0000MAJCOLSOR
   1-1. PERFORM 1000ITTSOR(初期処理)
   1-2. PERFORM 2000MAINSOR
        UNTIL WRK-R01EOF-Y OR WRK-COUNT >= CNS-MAX-TRANS
        PERFORM UNTIL ... OR ... カバー。上限500件ガード)
   1-3. PERFORM 4000STPSOR
   1-4. GOBACK

2. 1000ITTSOR(初期処理)
   2-1. DISPLAY 'JIN05UPD START' UPON CONSOLE
   2-2. M00MHOPAR 初期化 → CALL SUB02MSG(開始 001
   2-3. INITIALIZE WRKARA REPLACING NUMERIC BY ZEROS ALPHANUMERIC BY SPACES
   2-4. INITIALIZE CUNARA
   2-5. CALL SUB01DAT ... ON EXCEPTION → PERFORM 9000ERRSORCALL ON EXCEPTION カバー)
   2-6. EXEC SQL CONNECTDB接続)
   2-7. OPEN INPUT R01INNFIL OUTPUT W01OUTFIL
   2-8. PERFORM 2100READSOR(初回読込)

3. 2000MAINSOR(主処理)
   3-1. ADD 1 TO WRK-COUNT(処理件数増)
   3-2. R01TRAN-* → HV-* へホスト変数転記
   3-3. MOVE R01TRAN-TYPE TO WRK-TRAN-TYPE
   3-4. EVALUATE TRUE
        WHEN WRK-TRAN-INSERT → PERFORM 3100INSERTSOR
        WHEN WRK-TRAN-UPDATE → PERFORM 3200UPDATESOR
        WHEN WRK-TRAN-DELETE → PERFORM 3300ERRSOR(削除未実装)
        WHEN OTHER → PERFORM 3300ERRSOR
   3-5. PERFORM 2100READSOR

4. 2100READSOR(読込)
   READ R01INNFIL AT END → WRK-R01EOF='1'
             NOT AT END → ADD 1 TO CUN-R01INN

5. 3100INSERTSORINSERT
   EXEC SQL INSERT INTO EMPLOYEE:HV-* 9カラム)
   IF SQLCODE NOT = 0 → 3400DBERRSOR
    ELSE → ADD 1 TO CUN-DBINS

6. 3200UPDATESORUPDATE
   STRING 'UPDATING: ' HV-EMP-ID INTO WS-SQL-STR ON OVERFLOW
   DISPLAY WS-SQL-STR UPON CONSOLE WITH NO ADVANCING
   EXEC SQL UPDATE EMPLOYEE SET:HV-* 8-カラム→9列)
        WHERE EMP_ID = :HV-EMP-ID
   IF SQLCODE NOT = 0 → 3400DBERRSOR
    ELSE → ADD 1 TO CUN-DBUPD

7. 3300ERRSOR(不明種別)
   W01ERR-PROGRAMID=PGMID / W01ERR-EMP-ID=HV-EMP-ID / W01ERR-CODE='0001'
   STRING `INVALID TRAN-TYPE:` ... INTO W01ERR-DETAIL → WRITE
   ADD 1 TO CUN-W01OUT

8. 3400DBERRSORDBエラー)
   MOVE SQLCODE → WS-SQLCODE-DISP
   STRING `DB ERROR SQLCODE=` ... INTO W01ERR-DETAIL
   W01ERR-CODE='0002' → WRITE
   CALL SUB02MSG USING BY CONTENT

9. 4000STPSOR(終了)
   DISPLAY READ/INSERT/UPDATE/ERROR 件数 UPON CONSOLE
   CLOSE R01INNFIL
   CLOSE W01OUTFIL WITH LOCK
   CALL SUB02MSG(終了 002
   CALL SUB03END(正常終了)

10. 9000ERRSORABEND
   DISPLAY 'JIN05UPD ABEND' UPON CONSOLE
   CALL SUB03ENDE01ABDCOD

トランザクション種別(88-level)

88条件名 VALUE 対応処理
WRK-TRAN-INSERT 'A' 'B' 'C' 3100INSERTSOR
WRK-TRAN-UPDATE 'D' THRU 'G' 3200UPDATESOR
WRK-TRAN-DELETE 'Z' 3300ERRSOR(削除未実装)
WHEN OTHER 上記以外 3300ERRSOR

88-level の複数VALUE'A' 'B' 'C')と VALUE THRU'D' THRU 'G')をカバー。

カバレッジ対象キーワード

予約語/記号 使用箇所
PERFORM UNTIL ... OR ... 0000MAJCOLSOR: ループ上限
INITIALIZE ... REPLACING 1000ITTSOR: REPLACING NUMERIC / ALPHANUMERIC
CALL ... ON EXCEPTION 1000ITTSOR: SUB01DAT(異常時9000
EXEC SQL CONNECT / INSERT / UPDATE DB操作
88-level 複数VALUE + VALUE THRU 種別判定
EVALUATE TRUE 2000MAINSOR: WHEN分岐
STRING ... ON OVERFLOW 3200/3300/3400
DISPLAY ... UPON CONSOLE WITH NO ADVANCING 自編集
CALL ... BY CONTENT 3400DBERRSOR

出力レコード定義

出力ファイル1W01/VALID-ERROR)— COPY VALID-ERROR-REC 80B

No 項目名 設定元 PIC 備考
1 ERR-PROGRAMID CNS-PRGIDX X(8) 'JIN05UPD'
2 ERR-EMP-ID HV-EMP-ID X(8) 社員ID
3 ERR-CODE '0001'/'0002' X(4) エラー種別
4 ERR-DETAIL STRING編集 X(60) 詳細メッセージ

ER-CODE: 0001=不明種別、0002=DBエラー。

入力レコード(R01/HR-TRANS)— JIN05REC 200B

No 項目名 PIC 備考
1 TRAN-TYPE X(1) A/B/C=Insert, D-G=Update
2 TRAN-EMP-ID X(8)
3 TRAN-KANA-SEI X(20)
4 TRAN-KANA-MEI X(20)
5 TRAN-KANJI-NAME X(40)
6 TRAN-SUB-CODE X(4)
7 TRAN-BIRTH-DATE X(8)
8 TRAN-DEPT-CODE X(4)
9 TRAN-ENTRY-DATE X(8)
10 TRAN-STATUS X(1)
11 FILLER X(86)

COPY JIN05REC200B)を REPLACING (A)→R01 で定義。