Salesforce APEXでの特殊なSOQL記述方法(備忘)

APEX内では基本的には以下のようにSOQLを記述しますよね

List<Account> accounts = [Select Id, Name FROM Account WHERE Name = 'test'];

で、もし'test'の部分を変数化したい場合は以下のようになるかと思います。

String name = 'test';
List<Account> accounts = [Select Id, Name FROM Account WHERE Name =: name];

上記のような書き方ができるのが本来あるべきですが、
たまにこの書き方ではなくて、クエリ文字列で記述しなければならないときがあります。
その場合は基本的には以下のように文字列連結して書くのが基本かと思います。

String name = 'test';
String query = 'Select Id, Name FROM Account WHERE Name =' + name;
List<Account> = Database.query(query);

ただ、例えば複数のNameに該当するAccountを取得したい場合には
in句を利用する必要がありますが、
クエリ文字列でin句を生成するのはなかなかめんどくさいです
そんなときは以下のように書くことができます

List<String> names = new List<String>();
names.add('test1');
names.add('test2');

String query = 'Select Id, Name FROM Account WHERE Name in:names';
List<Account> = Database.query(query);

上記を見て、普通のエンジニアであれば
これだとin:namesがただの文字列でうまくクエリ流れないのでは?と思うでしょう。
ですが、SalesforceのAPEXではこれでいい感じにnamesを代入してくれます。
驚き。

この記事が気に入ったらサポートをしてみませんか?