query has too many rows for direct assignment, use FOR loop

代码运行时,如果碰到这个错误,主要是因为循环内检索到的 sObject 子记录集超过了200 个,比如

for (Account acct : [SELECT Id, Name, (SELECT Id, Name FROM Contacts)
                                                              FROM Account WHERE Id IN ('1')]) {
    List<Contact> contactList = acct.Contacts; // 引用子查询集合的时候报错
    Integer count = acct.Contacts.size(); // 引用子查询集合的时候报错
}

建议的写法,可以避免出现这个异常:

for (Account acct : [SELECT Id, Name, (SELECT Id, Name FROM Contacts)
        FROM Account WHERE Id IN ('<ID value>')]) {
    Integer count=0;
    for (Contact c : acct.Contacts) {
      count++;
    }
}

posted on 2021-11-23 14:42  问题集  阅读(78)  评论(0)    收藏  举报