SPI_execute_with_args — exécute une commande avec des paramètres hors ligne
int SPI_execute_with_args(const char *command
, intnargs
, Oid *argtypes
, Datum *values
, const char *nulls
, boolread_only
, longcount
)
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
$
et l'appel spécifie les
types et valeurs des données pour chaque symbole de ce type.
n
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.
const char * command
chaîne de commande
int nargs
nombre de paramètres en entrée ($1
, $2
, etc.)
Oid * argtypes
un tableau de longueur nargs
, contenant les
OID des types de données des paramètres
Datum * values
un tableau de longueur nargs
, containing des
valeurs réelles des paramètres
const char * nulls
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'
.
bool read_only
true
pour les exécutions en lecture seule
long count
nombre maximum de lignes à renvoyer ou 0
pour aucune
limite
La valeur de retour est identique à celle de SPI_execute
.
SPI_processed
et
SPI_tuptable
sont configurés comme dans
SPI_execute
en cas de succès.