No Results
Search Tips:
- Please consider misspellings
- Try different search keywords
Newer Version Available
SOQL For Loops
SOQL for loops iterate
over all of the sObject records returned by a SOQL query. The syntax
of a SOQL for loop is either:
or
Both variable and variable_list must be of the same type as the sObjects that are returned
by the soql_query. As in standard SOQL queries, the [soql_query] statement
can refer to code expressions in their WHERE clauses using the : syntax. For example:
The following example combines creating a list from a SOQL query,
with the DML update method.
SOQL For Loops Versus Standard SOQL Queries
SOQL for loops differ from standard SOQL statements because of the method they use to retrieve sObjects. While the standard queries discussed in SOQL and SOSL Queries can retrieve either the count of a query or a number of object records, SOQL for loops retrieve all sObjects, using efficient chunking with calls to the query and queryMore methods of the SOAP API. Developers should always use a SOQL for loop to process query results that return many records, to avoid the limit on heap size.
Note that queries including an aggregate function don't support queryMore. A runtime exception occurs if you use a query containing an aggregate function that returns more than 2000 rows in a for loop.
SOQL For Loop Formats
SOQL for loops can process
records one at a time using a single sObject variable, or in batches
of 200 sObjects at a time using an sObject list:
- The single sObject format executes the for loop's <code_block> once per sObject record. Consequently, it is easy to understand and use, but is grossly inefficient if you want to use data manipulation language (DML) statements within the for loop body. Each DML statement ends up processing only one sObject at a time.
- The sObject list format executes the for loop's <code_block> once per list of 200 sObjects. Consequently, it is a little more difficult to understand and use, but is the optimal choice if you need to use DML statements within the for loop body. Each DML statement can bulk process a list of sObjects at a time.
For example, the following code illustrates the difference between
the two types of SOQL query for loops: