「Too many DML statements: 151」についてみていきます。
1.エラー発生原因
ガバナ制限の一つです。1つの操作内(1トランザクション)で、151回以上のDMLステートメントを発行した場合に発生するエラーです。
DMLとはInsert/Update/DeleteなどのDBデータを操作する言語を指します。
Apexだけでなく、フロー処理の「レコードを更新」「レコードを作成」「レコードを削除」も対象となります。
1トランザクション内の合計DML発行数が151回以上の場合に発生するため、Apexでは70回+フローで81回=151回でもNGです。
2.エラー解決策
以下の例ではforループ処理内でDMLを発行しているためエラーとなっています。
// NG:forループ内でDML実行
for ( Integer i = 0 ; i < 101 ; i++ ) {
Account acc = new Account(
Name = 'テスト取引先' + i
);
insert acc;
}
// OK:forループ内でList化し、ループ外にてDMLを実行
List<Account> accList = new List<Account>();
for ( Integer i = 0 ; i < 101 ; i++ ) {
Account acc = new Account(
Name = 'テスト取引先' + i
);
accList.add(acc);
}
insert accList;
回避策としては、
- forループ内でのクエリ発行は行わず、ループ外で処理レコードをList化し一括処理へ変更する。
- Apexバッチ処理の場合は、BatchSizeを1~100など小さく設定することで回避する。
3.まとめ
初歩的なエラーですが、とても大事なため抑えておきましょう!
以上です。
コメント