【エラー】「Too many SOQL queries: 101 error」

未分類

「Too many SOQL queries: 101 error」についてみていきます。

1.エラー発生原因

Salesforceでは有名なガバナ制限の一つです。1つの操作内(1トランザクション)で、101回以上のSOQLクエリを発行した場合に発生するエラーです

Apexだけでなく、フロー処理の「レコードを取得」も対象となります。

1トランザクション内の合計クエリ数が101回以上の場合に発生するため、Apexでは20回+フローで81回=101回でもNGです。

ちなみにINSERT/UPDATE/DELETEなどのDMLは別のガバナエラー「Too many DML statements: 151」に該当し、1トランザクション内で合計151回以上の場合にエラーとなるため同様に注意しましょう。

2.エラー解決策

以下の例ではforループ処理内でクエリを発行しているためエラーとなっています。

        for ( Integer i = 0 ; i < 101 ; i++ ) {
            Account acc = [select id from Account limit 1];
        }
        // NG:101回以上のクエリ発行したためエラー

回避策としては処理の見直しが必須ですが、対応方法はケースごとに異なります。

一般的な対応方法は以下の通りです。

  • クエリ回数を100回以内にする。
    • forループ内でのクエリ発行は行わず、ループ外で処理レコードをList化し一括SELECTを行うなど。
  • 非同期処理に逃がす。(非同期の場合200回まで)
  • Apexバッチ処理の場合は、BatchSizeを1~100に設定すること。

3.まとめ

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

以上です。

コメント

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