Apex データ操作言語
このチュートリアルのこれまでのレッスンでは、sObject の概要、sObject のクエリ方法、および sObject 間のリレーションをトラバースする方法を見てきました。ここでは、Apex データ操作言語 (DML) を使用してデータベースのレコードを操作する方法を学習します。DML を使用すると、データベース内のデータを挿入、更新、削除、または復元できます。
請求書明細を挿入すると、sObject 変数 inv には新しい請求書明細の ID が入ります。
Database DML メソッド
別の方法として、Database クラスで提供されるメソッドをコールして DML 操作を実行できます。学習した DML ステートメントには対応する Database メソッドもあり、Database クラス Database.DMLOperation でコールできます。Database DML メソッドは、1 つの sObject または sObject のリストを第 1 引数として取ります。また、省略可能な Boolean 型の第 2 引数 opt_allOrNone も取ります。この引数では、操作の部分的な完了を許可するかどうかを指定します。この引数を false に設定した場合、あるレコードが失敗しても、残りの DML 操作を続行して完了することができます。Database DML メソッドは、実行した DML 操作の結果を返します。
DML ステートメントと Database DML ステートメントをいつ使用するか
通常、opt_allOrNone 引数を false に設定して一括 DML 操作の部分的な完了を許可する場合は DML ステートメントではなく Database メソッドを使用します。この方法では、コードで例外が発生するのを回避し、返された結果から拒否されたレコードを調査し、可能ならば操作を再試行できます (例外については次の「例外処理」で学習します)。opt_allOrNone 引数を false に設定していなければ、Database メソッドは例外もサポートします。
DML 一括処理中のエラーを Apex 例外としてスローし、制御の流れを直ちに中断する場合は DML ステートメントを使用します。これは try/catch ブロックを使用して処理できます。この動作は、ほとんどのデータベース手続き型言語での例外の処理方法に似ています。