我已经阅读了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)

即使记录确实在数据库中,也不会查询任何内容。调试显示“行(0)”,这意味着返回空。

我在做错的方式吗?

更新

我只是找到了一种不必添加单引号的方法。即使对于具有查询的字符串,也只需要应用相同的结肠变量即可。

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);

这也有效,如果子句包含DateTime,则必须有必要,因为DateTime不能被单个引号包围。

有帮助吗?

解决方案

为什么使用database.query()?如果您在方括号中使用普通查询,则内容将更简单,更快

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

更不用说参数绑定而不是字符串串联意味着无需担心SQL注射等。请考虑在括号中习惯这些查询,它们在开始时看起来很奇怪,但会多次保存您的屁股(错误的字段名称等)。

至于实际的串联 - 它像您所描述的那样工作,我不确定需要逃脱撇号。绑定变量是最安全的方法。

http://www.salesforce.com/us/developer/docs/apexcode/content/content/apex_dynamic_soql.htmhttp://www.salesforce.com/us/developer/docs/api/index_left.htm#cshid = sforce_api_api_api_calls_soql.htm| starttopic = conttopic = content;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top