1

我有 500 个地区要耕耘,还有 50 万个联系人。我尝试了一个 group by,但无法正常工作。如何避免遇到 soql 查询和返回行数的调控器限制?

public with sharing class Test {
  public static void  test() {
    List <_Territory__c> terrsWithAee = [select id,name, Aee_Territory__c from _Territory__c where Aee_Territory__c != null];
    String s = ' t.test Terrs with Aee = ' + terrsWithAee.size() + '\n';

    for (_Territory__c t :terrsWithAee) {
      Integer err = [select count() from contact where (Contact_AML_Territory__c  = :t.id AND BDW_AML_Territory__c != :t.Aee_Territory__c ) OR (Contact_ChoicePlus_Territory__c  = :t.id AND BDW_CP_Territory__c != :t.Aee_Territory__c)]; 

      s = 'For   Terr '+ t.id  + '  errors=  ' + err + ' terr name = \n'  ;
    }
  }
}
4

1 回答 1

4

只有两种方法可以查询这 500,000 个联系人行。

  1. 将此设置为区域上的批处理作业,并将批处理大小设置为 1 或其他一些较小的数字,以便您一次只查看几个区域的联系人。

  2. 使用@readonly 注释。这将消除查询行限制,但您将无法执行任何 DML 语句或执行任何其他会影响数据库的操作。

于 2012-08-07T02:09:38.417 回答