Paramètres de procédure
Les paramètres des appels de procédure peuvent être des paramètres d’entrée, d’entrée/sortie ou de sortie. Cela diffère des paramètres de toutes les autres instructions SQL, qui sont toujours des paramètres d’entrée.
Les paramètres d’entrée sont utilisés pour envoyer des valeurs à la procédure. Par exemple, supposons que la table Composants comporte des colonnes PartID, Description et Price. La procédure InsertPart peut avoir un paramètre d’entrée pour chaque colonne de la table. Par exemple :
{call InsertPart(?, ?, ?)}
Un pilote ne doit pas modifier le contenu d’une mémoire tampon d’entrée tant que SQLExecDirect ou SQLExecute retourne SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE ou SQL_NO_DATA. Le contenu de la mémoire tampon d’entrée ne doit pas être modifié lorsque SQLExecDirect ou SQLExecute retourne SQL_NEED_DATA ou SQL_STILL_EXECUTING.
Les paramètres d’entrée/sortie sont utilisés pour envoyer des valeurs à des procédures et récupérer des valeurs à partir de procédures. L’utilisation du même paramètre qu’une entrée et un paramètre de sortie a tendance à prêter à confusion et doit être évitée. Par exemple, supposons qu’une procédure accepte un ID de commande et retourne l’ID du client. Cela peut être défini avec un paramètre d’entrée/sortie unique :
{call GetCustID(?)}
Il peut être préférable d’utiliser deux paramètres : un paramètre d’entrée pour l’ID de commande et un paramètre de sortie ou d’entrée/sortie pour l’ID client :
{call GetCustID(?, ?)}
Les paramètres de sortie sont utilisés pour récupérer la valeur de retour de la procédure et pour récupérer des valeurs à partir d’arguments de procédure ; les procédures qui retournent des valeurs sont parfois appelées fonctions. Par exemple, supposons que la procédure GetCustID juste mentionnée retourne une valeur qui indique s’il a pu trouver l’ordre. Dans l’appel suivant, le premier paramètre est un paramètre de sortie utilisé pour récupérer la valeur de retour de procédure, le deuxième paramètre est un paramètre d’entrée utilisé pour spécifier l’ID de commande, et le troisième paramètre est un paramètre de sortie utilisé pour récupérer l’ID client :
{? = call GetCustID(?, ?)}
Les pilotes gèrent des valeurs pour les paramètres d’entrée et d’entrée/sortie dans les procédures pas différemment des paramètres d’entrée dans d’autres instructions SQL. Lorsque l’instruction est exécutée, elles récupèrent les valeurs des variables liées à ces paramètres et les envoient à la source de données.
Une fois l’instruction exécutée, les pilotes stockent les valeurs retournées des paramètres d’entrée/sortie et de sortie dans les variables liées à ces paramètres. Ces valeurs retournées ne sont pas garanties d’être définies tant que tous les résultats retournés par la procédure n’ont pas été récupérés et que SQLMoreResults a retourné SQL_NO_DATA. Si l’exécution de l’instruction génère une erreur, le contenu de la mémoire tampon du paramètre d’entrée/sortie ou de la mémoire tampon de paramètre de sortie n’est pas défini.
Une application appelle SQLProcedure pour déterminer si une procédure a une valeur de retour. Il appelle SQLProcedureColumns pour déterminer le type (valeur de retour, entrée, entrée/sortie ou sortie) de chaque paramètre de procédure.