是否可以在SOQL中concting串?
-
10-10-2019 - |
题
我已经阅读了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;
不隶属于 StackOverflow