Instrucciones preparadas
En SQL, las instrucciones preparadas se utilizan para crear plantillas de consultas o actualizaciones similares. Adobe Experience Platform Query Service admite instrucciones preparadas mediante una consulta parametrizada. Esto puede optimizar el rendimiento, ya que ya no necesita volver a analizar repetidamente una consulta.
Uso de instrucciones preparadas
Cuando se utilizan instrucciones preparadas, se admiten las siguientes sintaxis:
Preparar una instrucción preparada prepare
Esta consulta SQL guarda la consulta SELECT escrita con el nombre dado como PLAN_NAME
. Puede utilizar variables, como $1
en lugar de los valores reales. Esta instrucción preparada se guardará durante la sesión actual. Tenga en cuenta que los nombres de plan son no distingue mayúsculas de minúsculas.
Formato SQL
PREPARE {PLAN_NAME} AS {SELECT_QUERY}
SQL de ejemplo
PREPARE test AS SELECT * FROM table WHERE country = $1 AND city = $2;
Ejecutar una instrucción preparada execute
Esta consulta SQL utiliza la instrucción preparada que se creó anteriormente.
Formato SQL
EXECUTE {PLAN_NAME}('{PARAMETERS}')
SQL de ejemplo
EXECUTE test('canada', 'vancouver');
Anular la asignación de una instrucción preparada deallocate
Esta consulta SQL se utiliza para eliminar la instrucción preparada con nombre.
Formato SQL
DEALLOCATE {PLAN_NAME}
SQL de ejemplo
DEALLOCATE test;
Flujo de ejemplo con instrucciones preparadas
Inicialmente, puede tener una consulta SQL, como la siguiente:
SELECT * FROM table WHERE id >= 10000 AND id <= 10005;
La consulta SQL anterior devolverá la siguiente respuesta:
Esta consulta SQL se puede parametrizar mediante la siguiente instrucción preparada:
PREPARE getIdRange AS SELECT * FROM table WHERE id >= $1 AND id <= $2;
Ahora, la instrucción preparada se puede ejecutar utilizando la llamada siguiente:
EXECUTE getIdRange(10000, 10005);
Cuando se realice esta llamada, verá exactamente los mismos resultados que antes:
Una vez que haya terminado de utilizar la instrucción preparada, puede desasignarla mediante la llamada siguiente:
DEALLOCATE getIdRange;