【エラー】「Too many DML statements: 151」

未分類

「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.まとめ

初歩的なエラーですが、とても大事なため抑えておきましょう!

以上です。

コメント

タイトルとURLをコピーしました