SPI_execute_with_args — exécute une commande avec des paramètres hors ligne
int SPI_execute_with_args(const char *command, int nargs, Oid *argtypes, Datum *values, const char *nulls, bool read_only, long count)
SPI_execute_with_args exécute une commande qui pourrait inclure des références à des paramètres fournis en externe. Le texte de commande fait référence à un paramètre avec $n et l'appel spécifie les types et valeurs des données pour chaque symbole de ce type. read_only et count ont la même interprétation que dans SPI_execute.
Le principal avantage de cette routine comparé à SPI_execute est que les valeurs de données peuvent être insérées dans la commande sans mise entre guillemets et échappements, et donc avec beaucoup moins de risques d'attaques du type injection SQL.
Des résultats similaires peuvent être réalisés avec SPI_prepare suivi par SPI_execute_plan ; néanmoins, lors de l'utilisation de cette fonction, le plan de requête est toujours personnalisé avec les valeurs de paramètres spécifiques fournies. Pour une exécution simple, cette fonction doit être préférée. Si la même commande doit être exécutée avec plusieurs paramètres différents, chaque méthode peut être la plus rapide, le coût de la planification pouvant contre-balancer les bénéfices des plans personnalisés.
chaîne de commande
nombre de paramètres en entrée ($1, $2, etc.)
un tableau de longueur nargs, contenant les OID des types de données des paramètres
un tableau de longueur nargs, containing des valeurs réelles des paramètres
un tableau décrivant les paramètres NULL
Si nulls vaut NULL, alors SPI_execute_with_args suppose qu'aucun paramètre n'est NULL. Dans le cas contraire, chaque entrée du tableau nulls doit valoir ' ' si le paramètre correspondant est non NULL et 'n' si le paramètre correspondant est NULL (dans ce dernier cas, la valeur réelle de l'entrée values correspondante n'a pas d'importance). Notez que nulls n'est pas une chaîne de texte. C'est un tableau et, de ce fait, il n'a pas besoin d'un caractère de fin '\0'.
true pour les exécutions en lecture seule
nombre maximum de lignes à renvoyer ou 0 pour aucune limite