# Dynamic SOQL in Apex

In this article, we will look at a code example that demonstrates how to retrieve all fields of an Account record using Dynamic SOQL in Salesforce.

In the last article, you read about fetching all fields of an SObject using dynamic apex in Salesforce. You can have a look at that article from [here](https://blog.shubhamlashkan.com/how-to-fetch-all-fields-of-an-sobject-using-apex-in-salesforce) because most of the code will be similar.

### List All Fields

If you remembered in the last article we wrote the below code to fetch API names of all fields of Account SObject.

```java
Map <String,Schema.SObjectType> gd = Schema.getGlobalDescribe();
Schema.SObjectType sobjType = gd.get('Account');
Schema.DescribeSObjectResult r = sobjType.getDescribe();
Map<String, Schema.SObjectField> MapofField = r.fields.getMap();
for(String fieldName : MapofField.keySet()) 
{
Schema.SObjectField field = MapofField.get(fieldName);
Schema.DescribeFieldResult F = field.getDescribe();
System.debug('Field Name: '+F.getName()); 
}
```

### Store API Names in List Of String

Let us make the changes in the above code to store API Names of fields of Account Object.

```java
List<String> APINames = new List<String>();
Map <String,Schema.SObjectType> gd = Schema.getGlobalDescribe();
Schema.SObjectType sobjType = gd.get('Account');
Schema.DescribeSObjectResult r = sobjType.getDescribe();
Map<String, Schema.SObjectField> MapofField = r.fields.getMap();
for(String fieldName : MapofField.keySet()) 
{
Schema.SObjectField field = MapofField.get(fieldName);
Schema.DescribeFieldResult F = field.getDescribe();
APINames.add(f.getName()); 
}
```

As you can see in the above code snippet I have defined a list of strings named **APINames** which stores API Names of all fields. Also, I have removed the debug logs from the for loop as it is not required as of now.

### Create SOQL Query String

Now let's use the API names of fields to create a SOQL Query and store it in a String.

```java
List<String> APINames = new List<String>();
Map <String,Schema.SObjectType> gd = Schema.getGlobalDescribe();
Schema.SObjectType sobjType = gd.get('Account');
Schema.DescribeSObjectResult r = sobjType.getDescribe();
Map<String, Schema.SObjectField> MapofField = r.fields.getMap();
for(String fieldName : MapofField.keySet()) 
{
Schema.SObjectField field = MapofField.get(fieldName);
Schema.DescribeFieldResult F = field.getDescribe();
APINames.add(f.getName()); 
}
String fetchAllAccount = 'Select '+String.join(APINames, ',') + ' from Account' ;
```

As you can see in the above code snippet the last line creates a SOQL query to fetch all fields of account records.

The Join method of String Class Joins the elements of the specified iterable object, such as a List, into a single String separated by the specified separator.

In our code example, we have separated the string with a comma to construct the SOQL query.

### Execute Query using Database Method

As we have already constructed the SOQL query now let's execute the query using the Database.Query method.

```java
List<String> APINames = new List<String>();
Map <String,Schema.SObjectType> gd = Schema.getGlobalDescribe();
Schema.SObjectType sobjType = gd.get('Account');
Schema.DescribeSObjectResult r = sobjType.getDescribe();
Map<String, Schema.SObjectField> MapofField = r.fields.getMap();
for(String fieldName : MapofField.keySet()) 
{
Schema.SObjectField field = MapofField.get(fieldName);
Schema.DescribeFieldResult F = field.getDescribe();
APINames.add(f.getName()); 
}
String fetchAllAccount = 'Select '+String.join(APINames, ',') + ' from Account' ;
list<Account> accountList = Database.query(fetchAllAccount);
system.debug(accountList);
```

Execute the above code snippets from an anonymous window and open the debug logs. You will see list of account records with values of all fields being displayed.

### Conclusion

The concept looks more or less the same as we have to fetch the metadata information of an object so that we can construct the SOQL query and execute the query using Database.Query method.

I hope i am able to explain you how to write a simple dynamic SOQL query to fetch all field value of object record.

I am looking to get into technical writing so if you want me to write an article then please connect with me on my Twitter handle [**here**](https://twitter.com/ShubhamLashkan). Let me also know which topic I should write about next.

Learning Salesforce then do checkout Salesforce Verse: [https://salesforceverse.com](https://salesforceverse.com)
