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 usar variables, como $1
en lugar de valores reales. Esta instrucción preparada se guardará durante la sesión actual. Tenga en cuenta que los nombres de plan no distinguen entre mayúsculas y 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;