Find your content:

Search form

You are here

use string array in IN clause in dynamic soql

 
Share

I have an array of strings i'd like to use in the IN clause of a dynamic soql query.

if i wasn't building the string at runtime i could simply use (from the SF docs):

String[] ss = new String[]{'a', 'b'};
Account[] aa = [SELECT Id FROM Account 
                WHERE AccountNumber IN :ss];

however, as i'm building at runtime, i use the following (where operators is my array):

soqlString += ' and Operator__c in' + operators;

This errors because the string values in operators are not in quotes.

Is there an easy way to replicate the first example in dynamic SOQL or any other suggestion?


Attribution to: paul

Possible Suggestion/Solution #1

This post by @ca_peterson explains you can directly use bind variables in dynamic soql

Alternatively, you can use this utility method to convert a Set into a String, which can be used in Dynamic SOQL.

 //convert a Set<String> into a quoted, comma separated String literal for inclusion in a dynamic SOQL Query
    private String quoteKeySet(Set<String> mapKeySet)
    {
        String newSetStr = '' ;
        for(String str : mapKeySet)
            newSetStr += '\'' + str + '\',';

        newSetStr = newSetStr.lastIndexOf(',') > 0 ? '(' + newSetStr.substring(0,newSetStr.lastIndexOf(',')) + ')' : newSetStr ;
System.debug('quoteKeySet() :  newSetStr ============ ' + newSetStr);   

        return newSetStr;

    }

Attribution to: techtrekker

Possible Suggestion/Solution #2

The easiest way is to use the array is as given below.

List<String> operators = new List<String> {'AND','OR'};
soqlString = 'SELECT Name FROM ACCOUNT WHERE Name != null';
soqlString += ' AND Operator__c in :operators';

Apex #automagically converts the reference to collection variables in string query to the corresponding sequence of strings inside the SOQL query.

Just another magic!


Attribution to: Oxene
This content is remixed from stackoverflow or stackexchange. Please visit https://salesforce.stackexchange.com/questions/4669

My Block Status

My Block Content