Les paramètres dynamiques permettent de paramétrer les requêtes SQL à l'aide d'espaces réservés ?, sur le modèle de PrepareStatement dans les bases de données. Le moteur substitue chaque espace réservé par la valeur correspondante lors de l'exécution de la requête.
L'avantage principal réside dans l'efficacité du cache : les requêtes générées à partir du même modèle SQL améliorent le taux de succès du cache, indépendamment des valeurs de paramètres transmises. Ainsi, les recherches répétées avec différentes entrées exploitent le cache au lieu de déclencher une évaluation complète de la requête à chaque fois.
Remarque : Les paramètres dynamiques ne peuvent remplacer que des valeurs . Ils ne peuvent pas remplacer les mots-clés ni les noms de champs.
Fonctionnement
Tous les espaces réservés ? d'une instruction SQL sont positionnels. Transmettez leurs valeurs sous forme de tableau imbriqué via dynamic_params :
dynamic_params:[[value1, value2, ...]]
Le tableau interne mappe les espaces réservés ? de gauche à droite. Comme ? ne porte aucune information de type, utilisez CAST(? AS <type>) pour spécifier explicitement le type.
Exemples
Conversion de type de base et correspondance de chaînes
SELECT i1, cast(? as bigint) FROM t1 WHERE (i2 > 5 AND d3 < 10.1) OR s5 = ?
dynamic_params:[[10, "str5"]]
Le premier ? reçoit la valeur 10 (convertie en BIGINT) et le second la valeur "str5" (une chaîne).
Recherche géospatiale avec correspondance en texte intégral
SELECT
price,
title,
compute(
longitude,
latitude,
city_id,
CAST(? AS double),
CAST(? AS double),
CAST(1 AS bigint)
) AS distance
FROM
store,
unnest(store.sub_table)
WHERE
MATCHINDEX('shop', ?)
AND QUERY(name, ?)
dynamic_params:[[119.98844256998,
36.776817017143,
"excellect",
"fruit OR watermelon"]]
Les quatre espaces réservés ? reçoivent les valeurs dans l'ordre suivant : longitude (DOUBLE), latitude (DOUBLE), terme de recherche MATCHINDEX et expression QUERY. CAST(1 AS bigint) est un littéral, non un espace réservé ; il n'est donc pas inclus dans dynamic_params.
Limitations
Les espaces réservés
?ne peuvent remplacer que des valeurs, et non des mots-clés SQL ou des noms de champs.Chaque
?est associé par position.