Pregunta

He leído hilo desde 2005 y la gente dijo SOQL no soporta la concatenación de cadenas.

preguntándose si es compatible y alguien ha hecho esto.

Estoy intentando concat pero no hubo suerte: (

A continuación se muestra el código Apex tratando de encontrar el registro con el correo electrónico especificada.

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

Database.query(foo)

A pesar de que el registro está de hecho en la base de datos, no hace nada consulta. espectáculos de depuración "Fila (0)", que significa vacía se devuelve.

estoy haciendo concat camino equivocado?

Actualizar

Me acaba de encontrar una manera no tiene que añadir comilla simple. Sólo se necesita para aplicar misma variable de colon incluso para cadena que tiene consulta.

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

Esto funciona también y es necesario si la cláusula WHERE contiene DateTime DateTime ya no puede ser rodeado con comillas simples.

¿Fue útil?

Solución

Why do you use Database.query()? Stuff will be much simpler and faster if you'll use normal queries in brackets

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

Not to mention that parameter binding instead of string concatenation means no need to worry about SQL injections etc.. Please consider getting used to these queries in brackets, they look weird in beginnign but will save your butt many times (mistyped field names etc).

As for actual concatenation - it works like you described it, I'm just unsure about the need to escape apostrophes. Binding the variables is safest way to go.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top