Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Avance rapide | Suivant |
SPI_exec
lance la commande SQL spécifiée
pour nombre lignes.
Cette fonction ne devrait être appelée qu'à partir d'une procédure connectée. Si nombre vaut zéro, alors elle va exécuter la commande pour toutes les lignes auxquelles elle s'applique. Si nombre est plus grand que 0, alors le nombre de lignes pour lesquelles la commande sera exécutée est restreint (très semblable à une clause LIMIT). Par exemple,
SPI_exec("INSERT INTO tab SELECT * FROM tab", 5);
autorisera au plus cinq lignes à être insérées dans la table.
Vous pouvez passer plusieurs commandes dans une chaîne et la commande
peut être réécrite par des règles. SPI_exec
retourne le
résultat pour la dernière commande exécutée.
Le nombre réel de lignes pour lesquelles la (dernière) commande a été lancée est retourné dans la variable globale SPI_processed (sauf si la valeur de retour de la fonction est SPI_OK_UTILITY). Si la valeur de retour de la fonction est SPI_OK_SELECT, alors vous pouvez utiliser le pointeur global SPITupleTable *SPI_tuptable pour accéder aux lignes de résultat.
La structure SPITupleTable est définie comme suit :
typedef struct { MemoryContext tuptabcxt; /* contexte mémoire de la table de résultat */ uint32 alloced; /* nombre de valeurs allouées */ uint32 free; /* nombre de valeurs libres */ TupleDesc tupdesc; /* descripteur de rangées */ HeapTuple *vals; /* rangées */ } SPITupleTable;
valeurs est un tableau de pointeurs vers des lignes (le nombre d'entrées valables est donné par SPI_processed). tupdesc est un descripteur de ligne que vous pouvez passer aux fonctions SPI qui traitent des lignes. tuptabcxt, alloced et free sont des champs internes non conçus pour être utilisés par des routines SPI appelantes.
SPI_finish
libère tous les
SPITupleTables allouées pendant la procédure
courante. Vous pouvez libérer une table de résultats donnée plus tôt, si vous
en avez terminé avec elle, en appelant SPI_freetuptable
.
chaîne contenant la commande à exécuter
nombre maximum de lignes à traiter où à retourner
Si l'exécution de la commande a réussi, alors l'une des valeurs (positives) suivantes sera renvoyée :
si un SELECT (mais pas SELECT ... INTO) a été lancé
si un SELECT ... INTO a été lancé
si un DELETE a été lancé
si un INSERT a été lancé
si un UPDATE a été lancé
si une commande utilitaire (c'est-à-dire CREATE TABLE) a été lancée
Sur une erreur, l'une des valeurs négatives suivante est renvoyée :
si command est NULL ou count est inférieur à 0
si COPY TO stdout ou COPY FROM stdin ont été tentés
si DECLARE, CLOSE ou FETCH ont été tentés
si BEGIN, COMMIT ou ROLLBACK ont été tentés
si le type de commande est inconnu (ce qui ne devrait pas arriver)
si appel à partir d'une procédure non connectée
Les fonctions SPI_exec
,
SPI_execp
et
SPI_prepare
changent à la fois
SPI_processed et
SPI_tuptable (juste le pointeur, pas le contenu
de la structure). Sauvegardez ces deux variables globales dans des variables
locales de procédures si vous voulez accéder aux résultats de
SPI_exec
ou SPI_execp
sur plusieurs appels.
Précédent | Sommaire | Suivant |
SPI_finish | Niveau supérieur | SPI_prepare |