基本構文エラー
SQLCODE = -104
エラー内容:無効な構文、予約語、記号などが含まれている
よくある原因:
SQL構文ミス(カンマや括弧忘れ)
DB2の予約語をカラム名に使っている
対処法:
該当SQLの前後を確認(例:FROMの後にWHEREが抜けている など)
必要に応じて引用符("column")で囲う
SQLCODE = -204
エラー内容:オブジェクトが存在しない(テーブル、ビュー、関数など)
原因:
指定したテーブルやカラムが存在しない(タイポ、スキーマ違い)
開発環境と本番環境でスキーマが異なる
対処法:
SELECT * FROM SYSCAT.TABLES で存在確認
フル修飾名(スキーマ.テーブル名)でアクセスする
権限関連エラー
SQLCODE = -551
エラー内容:指定されたオブジェクトに対する権限がない
対処法:
GRANT SELECT ON テーブル TO ユーザー; などで明示的に権限付与
ロール・ユーザーの確認を行う
トランザクション/ロック関連
エラー内容:トランザクションがロックタイムアウトまたはデッドロックによりロールバックされた
原因:
長時間ロック保持している処理がある
同時アクセスで競合が発生
対処法:
トランザクションの粒度を小さくする
ロックの種類や順序を統一する
アプリ側でリトライ処理を入れる
データ整合性エラー
SQLCODE = -803
エラー内容:一意制約(UNIQUE)違反
原因:
主キー・ユニークキーに重複した値を挿入しようとした
対処法:
挿入前に SELECT で存在確認
MERGE文やON CONFLICT DO NOTHING的な構文の検討(環境次第)
SQLCODE = -407
エラー内容:NOT NULL制約違反(NULLを許容しない列にNULLが挿入された)
対処法:
該当カラムがNOT NULLか確認
アプリ側の値設定処理を見直す
SQLCODE = -530 / -531 / -532
エラー内容:外部キー(FK)制約違反
対処法:
親テーブルのデータが存在しているか確認(-530)
子テーブルのデータが存在していないか確認(-531, -532)
外部キー制約が有効なまま、削除/挿入順が逆になっていないかチェック
参考リンク
IBM公式:SQLCODE一覧
https://www.ibm.com/docs/ja/db2 (バージョン選択後、"SQL Messages"を参照)