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の連絡先行を照会する方法は2つだけです。

  1. これをテリトリーでのバッチジョブとして設定し、バッチサイズを1またはその他の小さい数に設定して、一度にいくつかのテリトリーの連絡先のみを表示するようにします。

  2. @readonlyアノテーションを使用します。これにより、クエリ行の制限がなくなりますが、DMLステートメントを実行したり、データベースにアクセスするその他の操作を実行したりすることはできなくなります。

于 2012-08-07T02:09:38.417 に答える