Résultats multiples
Un résultat est retourné par la source de données après l’exécution d’une instruction. ODBC a deux types de résultats : jeux de résultats et nombres de lignes. Le nombre de lignes est le nombre de lignes affectées par une instruction de mise à jour, de suppression ou d’insertion. Les lots, décrits dans Les lots d’instructions SQL, peuvent générer plusieurs résultats.
Le tableau suivant répertorie les options SQLGetInfo qu’une application utilise pour déterminer si une source de données retourne plusieurs résultats pour chaque type de lot différent. En particulier, une source de données peut retourner un nombre de lignes unique pour l’ensemble du lot d’instructions ou des nombres de lignes individuels pour chaque instruction du lot. Dans le cas d’une instruction de génération de jeux de résultats exécutée avec un tableau de paramètres, la source de données peut retourner un jeu de résultats unique pour tous les ensembles de paramètres ou jeux de résultats individuels pour chaque jeu de paramètres.
Type de lot | Nombres de lignes | Jeux de résultats |
---|---|---|
Lot explicite | SQL_BATCH_ROW_COUNT[a] | --[b] |
Procédure | SQL_BATCH_ROW_COUNT[a] | --[b] |
Tableaux de paramètres | SQL_PARAM_ARRAYS_ROW_COUNTS | SQL_PARAM_ARRAYS_SELECTS |
[a] Les instructions de génération de nombre de lignes dans un lot peuvent être prises en charge, mais le retour du nombre de lignes n’est pas pris en charge. L’option SQL_BATCH_SUPPORT dans SQLGetInfo indique si les instructions de génération de nombre de lignes sont autorisées par lots ; l’option SQL_BATCH_ROW_COUNTS indique si ces nombres de lignes sont retournés à l’application.
[b] Les lots et procédures explicites retournent toujours plusieurs jeux de résultats lorsqu’ils incluent plusieurs instructions de génération de jeu de résultats.
Remarque
L’option SQL_MULT_RESULT_SETS introduite dans ODBC 1.0 fournit uniquement des informations générales sur la possibilité de retourner plusieurs jeux de résultats. En particulier, elle est définie sur « Y » si les bits SQL_BS_SELECT_EXPLICIT ou SQL_BS_SELECT_PROC sont retournés pour SQL_BATCH_SUPPORT ou si SQL_PAS_BATCH est retourné pour SQL_PARAM_ARRAYS_SELECT.
Pour traiter plusieurs résultats, une application appelle SQLMoreResults. Cette fonction dis carte le résultat actuel et rend le résultat suivant disponible. Elle retourne SQL_NO_DATA lorsqu’aucun résultat supplémentaire n’est disponible. Par exemple, supposons que les instructions suivantes sont exécutées en tant que lot :
SELECT * FROM Parts WHERE Price > 100.00;
UPDATE Parts SET Price = 0.9 * Price WHERE Price > 100.00
Une fois ces instructions exécutées, l’application extrait les lignes du jeu de résultats créé par l’instruction SELECT . Lorsqu’il est terminé d’extraire des lignes, il appelle SQLMoreResults pour rendre disponibles le nombre de parties qui ont été réédifiées. Si nécessaire, SQLMoreResults dis carte s lignes non bloquées et ferme le curseur. L’application appelle ensuite SQLRowCount pour déterminer le nombre de parties repricées par l’instruction UPDATE .
Il est spécifique au pilote si l’instruction batch entière est exécutée avant la disponibilité des résultats. Dans certaines implémentations, c’est le cas ; dans d’autres, l’appel de SQLMoreResults déclenche l’exécution de l’instruction suivante dans le lot.
Si l’une des instructions d’un lot échoue, SQLMoreResults retourne SQL_ERROR ou SQL_SUCCESS_WITH_INFO. Si le lot a été abandonné lorsque l’instruction a échoué ou si l’instruction a échoué ou si l’instruction a échoué a été la dernière instruction du lot, SQLMoreResults retourne SQL_ERROR. Si le lot n’a pas été abandonné lorsque l’instruction a échoué et que l’instruction ayant échoué n’était pas la dernière instruction du lot, SQLMoreResults retourne SQL_SUCCESS_WITH_INFO. SQL_SUCCESS_WITH_INFO indique qu’au moins un jeu de résultats ou un nombre a été généré et que le lot n’a pas été abandonné.