Files
cobol-java-v3/black-box-data-create/rules/pgm_pattern/DB更新.md
T
2026-08-23 10:46:56 +08:00

89 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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开始。禁止添加本规则未定义的组,禁止缺组。