「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.まとめ
初歩的なエラーですが、とても大事なため抑えておきましょう!
以上です。
コメント