【SQL】INSERTでレコードが追加されないときの原因と対処


このページでは、ORACLEデータベースのSQLで、INSERT文を実行したがレコードが追加登録されないときの原因と対処方法を紹介しております。

INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり

INSERTでレコードが追加されない原因と対処

INSERT文を実行してレコードが追加されていない理由はいくつか考えられます。
ここでは特に

INSERTがエラーになって失敗している

例えば、INSERT文をプログラムから実行している場合に発生する可能性があります。

プログラムが実行され、INSERT文も発行されたが、INSERT文がSQLエラー等によってエラーになっていることがあります。

大抵の場合、アプリケーションも実行エラーとなっているはずなので、確認が必要です。

ちなみに、プログラムでINSERT文の実行は成功しても、プログラム自体がエラーになっていると、トランザクション単位でロールバックされて取り消されている可能性もあります。

まずは、プログラムのエラー状況を確認してみましょう。

INSERTするレコードが0件になっている

INSERT-SELECTを実行したとき、INSERTするためにSELECTしたレコードが0件になっていることがあります。
(※INSERT-SELECTについては「【SQL】INSERT-SELECTの使い方:サンプル多数あり」で解説しています。)

例えば、次のSQLです。TAB2テーブルからレコードをSELECTするとき「WHERE 1=0」という条件があり、抽出するレコードが0件となります。

抽出するレコードが0件のとき、INSERTされるレコード件数も0件となります。INSERT文は登録件数が0件でも正常終了します。

INSERT INTO tab1 SELECT * FROM tab2 WHERE 1=0;

疑わしい場合は、INSERT-SELECTのSELECT以降を切り取って、SQLを実行して確認してみましょう。

SELECT結果が0件の場合は、疑わしいWHERE句の条件を1つ1つコメントアウトして、どの条件が問題か確認していきましょう。

プログラムのコーディングミスや動的に条件が追加される場合に、矛盾した条件が追加されたり、何らかの理由で結合しているテーブルの件数が0件になっていると、発生しやすいです。

まとめ

まずはプログラムがエラーになっていないか、SQLでエラーになっていないかエラーログを確認しましょう。

正常終了しているのにレコードが追加されていない場合は、登録したいレコードが正しく取得できていない可能性があります。SQLを解析してレコードが0件となる理由を確認しましょう。

当サイトでは他にも、INSERT文の様々な書き方を解説しております。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。