ApexのDMLステートメントと失敗時の挙動

ApexのDMLステートメントには、スタンドアローン形式とメソッド形式があり、いずれかのレコードが失敗した時の動作に違いがあります

○スタンドアローン形式

・記述例:
insert obj;

・いずれかのレコードが失敗した場合の動作:
全てのレコードがロールバックされる。

○メソッド形式

・記述例:
Database.insert(obj, option);

・いずれかのレコードが失敗した場合の動作:
オプションが未指定またはtrueの場合、全てのレコードがロールバックされる。
オプションがfalseの場合、レコードは個別に成功 or 失敗となる。
失敗したレコードは無視され、処理が最後まで実行される

通常はスタンドアローン形式を使用し、バッチ処理など、個別レコードで失敗しても処理を続行したいときに、メソッド形式を使用すると良いでしょう。

一つ注意しなければいけないのは、いずれの形式であっても、 処理の成功/失敗によらず、コミットはされないということです。Apexが異常終了した際には、どちらの形式を使用していても、全てのレコードがロールバックされます。

コメント(0)