以下APEX代码:
for (List<MyObject__c> list : [select id,some_fields from MyObject__c]) {
for (MyObject__c item : list) {
//do stuff
}
}
是处理大量数据的标准模式 - 它会自动将大量结果集分解为200条记录,因此每个List将包含200个对象。
上述方法与以下方法之间是否有任何区别:
for (List<MyObject__c> list : Database.query('select...')) {
for (MyObject__c item : list) {
//do stuff
}
}
在SOQL需要动态时使用?
我被告知第二种方法是丢失数据,但我不确定细节,挑战在于找出原因,并防止数据丢失。
答案 0 :(得分:0)
您在哪里阅读使用动态SOQL会导致此方案中的数据丢失?这是不真实的AFAIK。静态Database.query()方法的行为与静态SOQL完全相同,除了一些小差异。
要回答您的第一个问题,您的方法之间的主要区别在于第一个是静态的(查询是固定的),第二个允许您动态定义查询,顾名思义。使用Dynamic SOQL的第二种方法仍然可以为您创建结果记录。
这种差异确实导致了一些其他微妙的考虑因素 - 动态SOQL不支持除基本操作之外的变量绑定。请参阅Daniel Ballinger关于此功能的想法here。我还需要添加必要的安全警告 - 如果您使用动态SOQL,不构建基于输入的查询,因为这会使您的应用程序容易受到SOQL注入。
另外,我只是好奇,您的用例/您在这里谈论的数据量是多少?根据您的要求,使用batch Apex可能更好。