Procédure : récupérer des paramètres d'entrée/de sortie
Cette rubrique montre comment appeler une procédure stockée dans laquelle un seul paramètre a été défini en tant que paramètre d'entrée/de sortie, et comment récupérer les résultats. Notez que lors de la récupération d'un paramètre de sortie ou d'entrée/de sortie, tous les résultats retournés par la procédure stockée doivent être traités avant que la valeur de paramètre retournée ne soit accessible.
Remarque : |
---|
Les variables qui ont pour valeur initiale ou mise à jour null, DateTime ou des types de flux de données ne peuvent pas être utilisées en tant que paramètres de sortie. |
Exemple
L'exemple suivant appelle une procédure stockée qui déduit les heures d'absence utilisées du nombre total d'heures d'absence disponibles pour un employé spécifique. La variable $vacationHrs, qui représente les heures d'absence utilisées, est passée à la procédure stockée sous forme de paramètre d'entrée. Après avoir mis à jour les heures d'absence disponibles, la procédure stockée utilise le même paramètre pour retourner le nombre d'heures d'absence restantes.
Remarque : |
---|
L'initialisation de $vacationHrs à 4 définit le PHPTYPE retourné à un nombre entier (integer). Pour garantir l'intégrité du type de données, les paramètres d'entrée/de sortie doivent être initialisés avant l'appel de la procédure stockée ; à défaut, le PHPTYPE souhaité doit être spécifié. Pour plus d'informations sur la spécification de PHPTYPE, consultez Procédure : spécifier les types de données PHP. |
Dans la mesure où la procédure stockée retourne deux résultats, sqlsrv_next_result doit être appelé après l'exécution de la procédure stockée afin de rendre disponible la valeur du paramètre de sortie. Après l'appel de sqlsrv_next_result, $vacationHrs contient la valeur du paramètre de sortie qui a été retourné par la procédure stockée.
Remarque : |
---|
L'appel des procédures stockées à l'aide de la syntaxe canonique est la pratique recommandée. Pour plus d'informations sur la syntaxe canonique, consultez Appel d'une procédure stockée. |
L'exemple suppose que SQL Server et la base de données AdventureWorks sont installés sur l'ordinateur local. Toutes les données de sortie sont écrites dans la console lorsque l'exemple est exécuté à partir de la ligne de commande.
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Drop the stored procedure if it already exists. */
$tsql_dropSP = "IF OBJECT_ID('SubtractVacationHours', 'P') IS NOT NULL
DROP PROCEDURE SubtractVacationHours";
$stmt1 = sqlsrv_query( $conn, $tsql_dropSP);
if( $stmt1 === false )
{
echo "Error in executing statement 1.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Create the stored procedure. */
$tsql_createSP = "CREATE PROCEDURE SubtractVacationHours
@EmployeeID int,
@VacationHrs smallint OUTPUT
AS
UPDATE HumanResources.Employee
SET VacationHours = VacationHours - @VacationHrs
WHERE EmployeeID = @EmployeeID;
SET @VacationHrs = (SELECT VacationHours
FROM HumanResources.Employee
WHERE EmployeeID = @EmployeeID)";
$stmt2 = sqlsrv_query( $conn, $tsql_createSP);
if( $stmt2 === false )
{
echo "Error in executing statement 2.\n";
die( print_r( sqlsrv_errors(), true));
}
/*--------- The next few steps call the stored procedure. ---------*/
/* Define the Transact-SQL query. Use question marks (?) in place of
the parameters to be passed to the stored procedure */
$tsql_callSP = "{call SubtractVacationHours( ?, ?)}";
/* Define the parameter array. By default, the first parameter is an
INPUT parameter. The second parameter is specified as an INOUT
parameter. Initializing $vacationHrs to 8 sets the returned PHPTYPE to
integer. To ensure data type integrity, output parameters should be
initialized before calling the stored procedure, or the desired
PHPTYPE should be specified in the $params array.*/
$employeeId = 4;
$vacationHrs = 8;
$params = array(
array($employeeId, SQLSRV_PARAM_IN),
array($vacationHrs, SQLSRV_PARAM_INOUT)
);
/* Execute the query. */
$stmt3 = sqlsrv_query( $conn, $tsql_callSP, $params);
if( $stmt3 === false )
{
echo "Error in executing statement 3.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Display the value of the output parameter $vacationHrs. */
sqlsrv_next_result($stmt3);
echo "Remaining vacation hours: ".$vacationHrs;
/*Free the statement and connection resources. */
sqlsrv_free_stmt( $stmt1);
sqlsrv_free_stmt( $stmt2);
sqlsrv_free_stmt( $stmt3);
sqlsrv_close( $conn);
?>
Voir aussi
Tâches
Procédure : spécifier la direction du paramètre
Procédure : récupérer des paramètres de sortie