Возможно ли объединить строки в SOQL? - PullRequest
1 голос
/ 15 ноября 2010

Я читал ветку с 2005 года, и люди говорили, что SOQL не поддерживает конкатенацию строк.

Хотя интересно, поддерживается ли он, и кто-то сделал это.

Я пытаюсь согласиться, но не повезло: (

Ниже приведен код APEX, пытающийся найти запись с указанным адресом электронной почты.

String myEmail = 'my@email.com';
String foo = 'SELECT emailTo__c, source__c FROM EmailLog__c 
              WHERE source__c = \'' +
              myEmail + '\';

Database.query(foo)

Даже если запись действительно находится в базе данных, она ничего не запрашивает. Отладочные шоу "row (0)", что означает пустое значение.

Я делаю конкат неправильно?

UPDATE

Я только что нашел способ не добавлять одинарные кавычки. Просто нужно применить ту же самую переменную двоеточия даже для строки, которая имеет запрос.

String foo = DateTime.newInstance(......);

String bar = 'SELECT id FROM SomeObject__c WHERE createdOn__c = :foo';

List<SomeObject__c> result = Database.query(bar);

System.debug(result);

Это тоже работает и необходимо, если предложение WHERE содержит DateTime, поскольку DateTime нельзя заключать в одинарные кавычки.

1 Ответ

4 голосов
/ 15 ноября 2010

Почему вы используете Database.query ()? Материал будет намного проще и быстрее, если вы будете использовать обычные запросы в скобках

[SELECT emailTo__c, source__c FROM EmailLog__c WHERE source__c = :myEmail]

Не говоря уже о том, что привязка параметров вместо конкатенации строк означает, что вам не нужно беспокоиться о SQL-инъекциях и т. Д. Пожалуйста, рассмотрите возможность привыкнуть к этим запросам в скобках, они выглядят странно в beginnign, но многократно сохранят вашу задницу (ошибочные имена полей и т.д.).

Что касается фактической конкатенации - она ​​работает так, как вы ее описали, я просто не уверен в необходимости избегать апострофов. Привязка переменных - это самый безопасный способ.

http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_dynamic_soql.htm http://www.salesforce.com/us/developer/docs/api/index_Left.htm#CSHID=sforce_api_calls_soql.htm|StartTopic=Content%2Fsforce_api_calls_soql.htm|SkinName=webhelp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...