Utilisation d'une procédure stockée avec retour d'état
Une procédure stockée SQL Server que vous pouvez appeler est une procédure qui retourne un état ou un paramètre de résultat. Cet état permet généralement d'indiquer la réussite ou l'échec de la procédure stockée. Le pilote JDBC Microsoft pour SQL Server fournit la classe SQLServerCallableStatement que vous pouvez utiliser pour appeler ce type de procédure stockée et traiter les données qu'elle retourne.
Quand vous appelez ce type de procédure stockée à l’aide du pilote JDBC, vous devez utiliser la séquence d’échappement SQL call
conjointement avec la méthode prepareCall de la classe SQLServerConnection. La syntaxe de la séquence d’échappement call
avec un paramètre de retour d’état est la suivante :
{[?=]call procedure-name[([parameter][,[parameter]]...)]}
Notes
Pour plus d’informations sur les séquences d’échappement SQL, consultez Utiliser des séquences d’échappement SQL.
Quand vous construisez la séquence d’échappement call
, spécifiez le paramètre de retour d’état l’aide du caractère ?
(point d’interrogation). Ce caractère fait office d'espace réservé pour la valeur de paramètre qui est retournée par la procédure stockée. Pour spécifier une valeur pour un paramètre de retour d’état, vous devez spécifier le type de données du paramètre à l’aide de la méthode registerOutParameter de la classe SQLServerCallableStatement avant d’exécuter la procédure stockée.
Notes
Lors de l’utilisation du pilote JDBC avec une base de données SQL Server, la valeur spécifiée pour le paramètre de retour d’état dans la méthode registerOutParameter est toujours un nombre entier que vous pouvez spécifier à l’aide du type de données java.sql.Types.INTEGER.
En outre, quand vous transmettez une valeur à la méthode registerOutParameter pour un paramètre de retour d’état, vous devez spécifier non seulement le type de données à utiliser pour le paramètre, mais également la position ordinale de celui-ci dans l’appel de procédure stockée. La position ordinale du paramètre de retour d'état est toujours 1 car il s'agit toujours du premier paramètre de l'appel à la procédure stockée. Bien que la classe SQLServerCallableStatement fournisse la prise en charge de l’utilisation du nom de paramètre pour indiquer le paramètre spécifique, vous pouvez utiliser uniquement le numéro de position ordinale d’un paramètre pour les paramètres de retour d’état.
Par exemple, créez la procédure stockée suivante dans l’exemple de base de données AdventureWorks2022 :
CREATE PROCEDURE CheckContactCity
(@cityName CHAR(50))
AS
BEGIN
IF ((SELECT COUNT(*)
FROM Person.Address
WHERE City = @cityName) > 1)
RETURN 1
ELSE
RETURN 0
END
Cette procédure stockée retourne une valeur de statut 1 ou 0, selon que la ville spécifiée dans le paramètre cityName figure ou non dans la table Person.Address.
Dans l’exemple suivant, une connexion ouverte à l’exemple de base de données AdventureWorks2022 est passée à la fonction, et la méthode execute permet d’appeler la procédure stockée CheckContactCity :
public static void executeStoredProcedure(Connection con) {
try(CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");) {
cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
cstmt.setString(2, "Atlanta");
cstmt.execute();
System.out.println("RETURN STATUS: " + cstmt.getInt(1));
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}