Apex Too many SOQL queries: xxxエラーの解決方法

環境
Salesforce

エラー
Too many SOQL queries: xxx

原因
Salesforceではガバナ制限が設けられており、1トランザクションで発行される SOQL クエリの
合計数の上限が100と定められています。(非同期処理では200)

Apex はマルチテナント環境で実行するため、Apex ランタイムエンジンは、
回避 Apex コードまたはプロセスが共有リソースを独占しないよう制限事項を強制します。
一部の Apex コードが制限を超える場合、関連付けられたガバナは、
処理できない実行時例外を発行します。

修正前コード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
for(Integer i = 0; i < 112; i++){
List<Account> accList = [SELECT Id FROM Account];
}
for(Integer i = 0; i < 112; i++){ List<Account> accList = [SELECT Id FROM Account]; }
for(Integer i = 0; i < 112; i++){
    List<Account> accList = [SELECT Id FROM Account];
}

対策
SOQLをforループ内で使用しない

修正後コード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
for(Account accs : [SELECT Id FROM Account]){
//処理コード
}
for(Account accs : [SELECT Id FROM Account]){ //処理コード }
for(Account accs : [SELECT Id FROM Account]){
    //処理コード
}

 

IT

Posted by arkgame