修复一个命中调控器限制的soql查询

时间:2012-08-07 00:52:49

标签: sql salesforce apex-code soql

我有500个地区可以通过和500k联系。我尝试了一个小组,但无法让它工作。如何避免在返回的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'  ;
    }
  }
}

1 个答案:

答案 0 :(得分:4)

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

  1. 将其设置为地区上的批处理作业,并将批处理大小设置为1或其他一些小编号,这样您只能同时查看几个地区的联系人。

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