# DB更新 データ生成規則 ## 概要 入力ファイルのレコードをDBテーブルにINSERT/UPDATE/DELETEするプログラムのテストデータを生成する。 出力はSQL INSERTファイル。 本规则定义4组数据:组1正常INSERT、组2 INSERT+UPDATE、组3 DELETE対象(无DELETE则以UPDATE/INSERT代替)、组4重复INSERT异常(DB-A001)。 ## 输入 - 詳細設計書の処理詳細(SQL操作と分岐条件) - 入力ファイルのCOPYBOOKフィールド定義 - DBテーブル定義と主キー - キー項目一覧 ## 生成データ組 | 组 | 用途 | 内容 | 条件 | |----|------|------|------| | 1 | 正常INSERT | 5件以上の新規INSERT + 末尾に多keyテスト | 必須 | | 2 | INSERT+UPDATE | 3件以上の重複主キーレコード(UPDATEトリガー用)+ 末尾に多keyテスト | 必須 | | 3 | DELETE対象 | 2件以上のDELETE対象レコード + 末尾に多keyテスト | 処理詳細にDELETE操作がある場合はDELETE対象、ない場合はUPDATE/INSERT対象で代替 | | 4 | 重复INSERT异常(DB-A001) | 既存主キーを再度INSERTするレコード(一意キー違反→SQLCODEエラー確認)+ 末尾に多keyテスト | 必須 | ## 多keyテスト(各組の末尾に追加) キーが複数項目(例: A001, A002, A003)で構成される場合、以下のテストデータを追加する(キー項目が1つの場合は追加しない)。 **手順:** 1. 該当グループ内から1件のレコードを選び、基準データとする 2. キー項目がN個ある場合、N件の追加レコードを生成する 3. 各追加レコードは「1つのキー項目のみ基準データと異なり、残りのキー項目は基準データと完全一致」とする 4. 非キー項目(DATA部分)は基準データと同じ値でよい **例: キーが (A001, A002, A003) の場合、基準データ (a001, b001, c001) に対し:** - 追加1: (a002, b001, c001) → A001のみ異なる → INSERTされるべき(別レコード) - 追加2: (a001, b002, c001) → A002のみ異なる → INSERTされるべき(別レコード) - 追加3: (a001, b001, c002) → A003のみ異なる → INSERTされるべき(別レコード) これにより、プログラムが正しいキー項目で比較していることを検証する。 ## データ生成手順 1. **SQL操作の特定**: 処理詳細からINSERT/UPDATE/DELETE/UPSERTの有無を確認する 2. **キー項目の特定**: キー項目一覧からDBテーブルの主キーを特定する 3. **フィールド値生成**: 入力COPYBOOKの各フィールドに対しPIC定義に従い値を生成: - PIC X(n): 左詰め・スペース埋め - PIC 9(n): 右詰め・先行ゼロ - PIC S9(n) COMP / COMP-3: 通常の10進数文字列(符号付き・なし) - DATE / 日付系フィールド: 実在しそうな日付(YYYYMMDD形式) - TIME / 時刻系フィールド: 実在しそうな時刻(HHMM形式) - ID / 番号系フィールド: 連番 - NAME系フィールド: 実在しそうな氏名 - 金額 / SALARY系: 現実的な金額 4. **組1 (正常INSERT)**: - 全レコードの主キーを重複なしで生成 - 各レコードの非キーフィールドは異なる値を設定 - 末尾に多keyテストデータを追加 5. **組2 (INSERT+UPDATE)**: - 一部のレコードの主キーを組1と重複させる - 重複レコードの非キーフィールド値は組1と異なる値にする - 末尾に多keyテストデータを追加 6. **組3 (DELETE対象)**: - STATUS='9'などの削除フラグ付きデータ(処理詳細にDELETE操作がない場合はUPDATE/INSERT対象データで代替) - 末尾に多keyテストデータを追加 7. **組4 (重复INSERT异常)**: - 組1で既に存在する主キーを再度INSERTするレコードを生成 - 期待: 一意キー違反→SQLCODEエラー/設計書どおりのエラー処理 - 末尾に多keyテストデータを追加 ## 出力形式 各組1つのSQLファイル: `{プログラムID}_g{groupId}.sql` ```sql -- Group: 1 -- 用途: 正常INSERT + 多keyテスト INSERT INTO TABLE_NAME (COL1, COL2, ...) VALUES ('val1', 'val2', ...), ('val3', 'val4', ...); ``` **注意:** - 出力は純粋なSQL INSERT文のみ(コードブロックで囲まない) - 複数行を1つのINSERT文にまとめる(VALUESの後にカンマ区切りで複数行) 组数约束:输出组数必须与本规则定义的4组一致(g1〜g4),组号连续从1开始。禁止添加本规则未定义的组,禁止缺组。