今回は、Apexの「Too many SOQL queries: 101」の原因と回避策についてです。
このエラーはエンジニアになりたての頃よく出くわしました。。。
目次
エラー原因
エラーの原因は、1度の処理(以下1トランザクション)で発行される SOQL クエリの合計数が100を超えたからです。
Salesforceではガバナ制限が設けられており、1トランザクションで発行される SOQL クエリの合計数の上限が100と定められています。(非同期処理では200)
例えば、以下のコードを匿名実行コンソールで実行し、SOQLを101回以上発行するとエラーがでます。
for(Integer i = 0; i < 101; i++){
List<Account> accList = [SELECT Id FROM Account];
}
エラー回避策
回避策としては、SOQLをforループ内で使用しないことです。
ループ内で使用するとループの回数分SOQLが発行されすぐに上限に達してしまいます。
例えば、以下のコードのように「SOQL for」を使用することでこのエラーを回避することができます。
for(Account acc : [SELECT Id FROM Account]){
//処理
}
今回は以上です!
あわせて読みたい


【Salesforce】Apexガバナ制限一覧 検証つきでよくわかる!
Apexの開発時に毎度毎度気をつけなければならないのがガバナ制限。 うまく実装できたと思ってもデータ量が多かったりするとガバナ制限に引っかかってエラーに。。。なん…
コメント