# xcsql [�ントロール]SQL文テーブル — xlsx vs DB 対照 - xlsx: /mnt/d/25.テーブル一覧/10.テーブル定義/30.給与/xcsql.xlsx - DB: updsv7_opho_ci (192.168.1.72:5432) / public.xcsql - 改訂履歴: 7.0.0 新規作成 (2023-10-04 NSC) — 改訂なし ## 1. 全体対数 | 区分 | 項目 | 値 | |---|---|---| | 列数 | xlsx | 13 | | 列数 | DB | 13 | | 列差 | DB のみ | 0 | | 列差 | xlsx のみ | 0 | | 行数 | DB | 約871行 | | 表サイズ | DB | 1120 kB | | インデックス | xcsql_idx UNIQUE | (ccompkb, cqtaikeikb, dstart, cpgmid, nrunseq) | ## 2. 業務身份 - **UPDS-V7 の「SQL 集中管理表」** — 各機能プログラムが必要な SQL(UPDATE/INSERT/DELETE/SELECT)をプログラム内にハードコードせず、本表に格納 - プログラム実行時、cpgmid + nrunseq で該当 SQL を本表から取得 → 即時実行 - 用途: - SQL の変更時にプログラム再コンパイル不要(表データ更新で対応) - 業務ロジックを「コードに書く」「DB に書く」のハイブリッドパターン - クライアントごとのカスタマイズ容易(同じ cpgmid に対し適用期間 dstart〜dend で複数バージョン保持) ## 3. カラム対照(13 列 全一致) | No | カラム名 | カラムID | xlsx型 | xlsx桁 | xlsx制約 | DB型 | DB桁 | NOT NULL | xlsx idx | 用途 | |---|---|---|---|---|---|---|---|---|---|---| | 1 | 会社区分 | ccompkb | varchar | 2 | N | varchar | 2 | YES | 1 | PK候補 | | 2 | 給与体系区分 | cqtaikeikb | varchar | 2 | N | varchar | 2 | YES | 3 | PK候補 | | 3 | 適用開始年月 | dstart | date | - | N | date | - | YES | 4 | PK候補 (YYYY/MM/01固定) | | 4 | 適用終了年月 | dend | date | - | N | date | - | YES | - | 末日固定(無期限は 2222/12/31) | | 5 | 更新ユーザ)端末ID | cmnclient | varchar | 10 | - | varchar | 10 | NO | - | 更新ログ | | 6 | 更新ユーザ)会社区分 | cmncomp | varchar | 2 | - | varchar | 2 | NO | - | 更新ログ | | 7 | 更新ユーザ)ユーザID | cmnuser | varchar | 10 | - | varchar | 10 | NO | - | 更新ログ | | 8 | 更新�ーザ)更新日時 | dmndate | timestamp | - | - | timestamp | - | NO | - | 更新ログ | | 9 | プログラム識別 | cpgmid | varchar | 20 | N | varchar | 20 | YES | 2 | PK候補 (例: DJNC1020, UMMN0120, UCLR1000 等) | | 10 | 実行SEQ | nrunseq | numeric | 4 | N | numeric | 4,0 | YES | 5 | PK候補 (同一プログラム内の実行順序) | | 11 | SELECT文区分 | nselect | numeric | 1 | N | numeric | 1,0 | YES | - | 1=SELECT文(参照用)、0=それ以外(更新系) | | 12 | SQL文 | csql | varchar | 4000 | - | varchar | 4000 | NO | - | **SQL本体**(MyBatis 動的バインド可)| | 13 | 備考 | cbikou | varchar | 40 | - | varchar | 40 | NO | - | コメント用 | ## 4. 主キー - UNIQUE INDEX: xcsql_idx (ccompkb, cqtaikeikb, dstart, cpgmid, nrunseq) — 5 列複合キー - xlsx H列「インデックス」記載: ccompkb=1, cqtaikeikb=3, dstart=4, cpgmid=2, nrunseq=5, dend 空欄 → 5 列複合 UNIQUE として存在 - dend は NOT NULL だが PK 表記なし → 業務上 dend は「有効期限終端」で PK 判定に使われない(dstart のみ期間判定) ## 5. データ例(先頭 5 件) | cpgmid | nrunseq | nselect | csql 抜粋 | cbikou | |---|---|---|---|---| | DJNC1020\|1 | 2620 | 0 | UPDATE DKIDO_DUMMY A SET CHECK_FLG = '8' WHERE A.WK_CLIENT_ID = #{XsClnt端末ID} | 異動入力論理チェック 常勤の厚友会加入脱退 | | DJNC1020\|1 | 2630 | 0 | INSERT INTO DK_RONRI_CHK SELECT ... | 異動入力論理チェック 再任用以外の令和会加入脱退 | | UMMN0120 | 20 | 0 | DELETE FROM UWLOADBANK WHERE CCOMPKB in ('00',#{Gs会社ID}) | 各種初期化処理 | | UMMN0120 | 30 | 0 | DELETE FROM UWBANKSAI WHERE ... | 各種初期化処理 | | UMMN0120 | 40 | 0 | DELETE FROM UWFURIKOMISAI WHERE ... | 各種初期化処理 | ## 6. 観察 - csql に MyBatis 動的バインド `#{Gs会社ID}` `#{XsClnt端末ID}` が含まれる → xcsql から読んだ SQL をさらに MyBatis が評価する二段構えの仕組み - dstart='1899-12-31' / dend='2222-12-30' は「全期間有効」セマフォック値(UPDS-V7 全体標準) - cpgmid に `|` 区切りでバージョン管理する場合あり(例: DJNC1020\|1 = DJNC1020 のバージョン 1) - nrunseq は同一 cpgmid 内で SQL の実行順序を保証(例: 10, 20, 30, ... のように 10 刻み) - nselect 区分により、参照系 SQL(一覧検索等)と更新系 SQL(INSERT/UPDATE/DELETE)を判別 ## 7. 結論 - 列定義(列名・型・桁・NOT NULL)は xlsx と DB で完全一致 - PK 表記ルール: xlsx H列「インデックス」で複合 UNIQUE を 5 列複合と表現 - 致命的な不一致なし - 要確認: xlsx F列「N」6列のうち dend は PK 表記なし → 業務上 dstart のみが期間判定に使われる設計