80 lines
3.7 KiB
Markdown
80 lines
3.7 KiB
Markdown
# DB更新 データ生成規則
|
|
|
|
## 概要
|
|
|
|
入力ファイルのレコードをDBテーブルにINSERT/UPDATE/DELETEするプログラムのテストデータを生成する。
|
|
出力はSQL INSERTファイル。
|
|
|
|
## 入力
|
|
|
|
- 詳細設計書の処理詳細(SQL操作と分岐条件)
|
|
- 入力ファイルのCOPYBOOKフィールド定義
|
|
- DBテーブル定義と主キー
|
|
- キー項目一覧
|
|
|
|
## 生成データ組
|
|
|
|
| 组 | 用途 | 内容 | 条件 |
|
|
|----|------|------|------|
|
|
| 1 | 正常INSERT | 5件以上の新規INSERT + 末尾に多keyテスト | 必須 |
|
|
| 2 | INSERT+UPDATE | 3件以上の重複主キーレコード(UPDATEトリガー用)+ 末尾に多keyテスト | 必須 |
|
|
| 3 | DELETE対象 | 2件以上のDELETE対象レコード + 末尾に多keyテスト | 処理詳細にDELETE操作がある場合のみ |
|
|
|
|
## 多keyテスト(各組の末尾に追加)
|
|
|
|
キーが複数項目(例: A001, A002, A003)で構成される場合、以下のテストデータを追加する。
|
|
|
|
**手順:**
|
|
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対象)**: 処理詳細にDELETE操作がある場合のみ生成
|
|
- STATUS='9'などの削除フラグ付きデータ
|
|
- 末尾に多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の後にカンマ区切りで複数行)
|