問題
Apex処理が100件のAccountレコードと2,000件のContactレコードを挿入した後、500件のOpportunityレコードを挿入しようとしてDML例外が発生しました。Accountレコードは、allOrNone引数をfalseに設定してdatabase.insert()メソッドを呼び出すことで挿入されます。ContactおよびOpportunityレコードは、スタンドアロンinsert文(通常のInsert 変数名;)を使用して挿入されます。この処理でデータベースにコミットされるレコードの総数はいくつですか。
- 2,000
- 2,100
- 0
- 100
正解
- 2,000
- 2,100
- 0
- 100
解説
処理の流れ
- 100件のAccountレコードは
Database.insert(obj, false)
を使用して挿入されるので、これらのレコードはデータベースにコミットされます。 - 次に2,000件のContactレコードがスタンドアロンのinsertステートメントを使用して挿入しようとしますが、この操作はガバナ制限を超えるため、DML例外が発生します。この例外が発生すると、この2,000件のContactレコードの挿入はロールバックされます。
- 500件のOpportunityレコードの挿入は考慮する必要がありません。なぜなら、前のステップでDML例外が発生しているためです。
それぞれの選択肢の理由について説明します。
□ 2,000
これは不正解です。2,000件のContactレコードの挿入時にDML例外が発生するため、これらのレコードはデータベースにコミットされません。
□ 2,100
これは不正解です。2,000件のContactレコードはDML例外のためコミットされません。したがって、100件のAccountレコードと2,000件のContactレコードの合計2,100件がコミットされることはありません。
□ 0
これは不正解です。100件のAccountレコードはDatabase.insert(obj, false)を使用して正常にデータベースにコミットされます。
□ 100
これは正解です。Database.insert(obj, false)を使用して100件のAccountレコードがデータベースに正常にコミットされます。しかし、2,000件のContactレコードの挿入時にDML例外が発生するため、これらのレコードはデータベースにコミットされません。したがって、データベースにコミットされるレコードの総数は100件のAccountレコードのみとなります。
コメント