|
|
|
|
|
- Présentation
- Comment le faire ?
- Les étapes
- Exécution de la procédure stockée avec HExécuteRequêteSQL
- Remarques
- Exemple 1 : Procédure stockée avec paramètre de retour
- 1. Déclaration de la source de données
- 2. Déclaration des variables utilisées par la procédure
- 3. Exécution de la procédure stockée et récupération du résultat
- Exemple 2 : Fonction stockée avec valeur de retour
- 1. Déclaration de la source de données
- 2. Déclaration des variables utilisées par la procédure
- 3. Exécution de la procédure stockée et récupération du résultat
Connecteur Natif SQL Server : Récupérer la valeur de sortie d'une procédure stockée
Disponible uniquement avec ce type de connexion
Le Connecteur Natif SQL Server permet de : - spécifier des valeurs d'entrées lors de l'appel à une procédure stockée.
- récupérer des valeurs de sorties après l'appel d'une procédure stockée.
Les étapes Pour spécifier et récupérer des valeurs lors de l'exécution d'une requête de type "Procédure stockée", il faut : - Déclarer une source de données. Cette source de données contiendra le résultat de la procédure stockée SQL.
- Déclarer les différentes variables de la procédure stockée (variables d'entrées et variables de sorties).
Les variables sont récupérées dans le type spécifié en WLangage. Par défaut les variables sont de type texte. Des conversions peuvent donc se produire du type natif de la base vers le type WLangage. Ces conversions peuvent entraîner des arrondis ou des formatages inattendus (par exemple une Date transformée en chaîne). Il est donc conseillé de spécifier de façon adéquate les types WLangage des variables avant d'exécuter la procédure stockée. Ceci est peut être fait :- soit en initialisant la valeur de la variables (types simples : entier, chaîne, flottant)
- soit en spécifiant le type attendu grâce à la propriété Type (non supporté dans cette version)
Le nom de ces variables doit correspondre au nom des paramètres de cette procédure sur SQL Server. Remarque : Dans certains cas, le serveur n'accepte pas de réaliser une conversion implicite. Une erreur de conversion est alors affichée. Dans ce cas, il est nécessaire d'initialiser le type en lui fixant une valeur quelconque dans le type voulu. Par exemple, pour fixer un type numérique, il suffit de faire MaRequête.Paramètre = 0. - Exécuter la procédure stockée à l'aide de la fonction HExécuteRequêteSQL.
Exécution de la procédure stockée avec HExécuteRequêteSQL La fonction HExécuteRequêteSQL doit être utilisée avec : - le nom de la connexion,
- la constante hRequêteSansCorrection
- le nom de la procédure, suivi des paramètres (en incluent le caractère @). Pour spécifier les paramètres de sortie, il est nécessaire d'indiquer 'out" ou 'output'. Les paramètres doivent être séparés par des virgules.
Mode compatible : Si la requête ne contient que le nom de la procédure, le Connecteur Natif ajoute automatiquement les paramètres de la procédure stockée. Attention : Si certains paramètres possèdent une valeur pas défaut et ne sont pas référencés par le code WLangage, une erreur de non référencement de la variable apparaîtra. Dans ce cas, il faut soit modifier le code d'appel à la requête en définissant les paramètres obligatoires, soit déclarer explicitement la variable optionnelle. Exemple : Code pour créer la procédure : CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output) AS set @res=@p1+@p2 Code pour exécuter la procédure : p1 est un paramètre obligatoire et p2 optionnel. Le code suivant génère une erreur car le Connecteur Natif attendait p2 dans la requête :
MaProcédure est une Source de Données MaProcédure.p1 = 10 SI HExécuteRequêteSQL(MaProcédure, "MaConnexion", hRequêteSansCorrection, "MyProc") ALORS Trace("p1=" + MaProcédure.p1) SINON Erreur(HErreurInfo()) FIN
Le code à utiliser est le suivant :
MaProcédure est une Source de Données MaProcédure.p1 = 10 SI HExécuteRequêteSQL(MaProcédure, "MaConnexion", hRequêteSansCorrection, ... "MyProc @p1, @p2 out") ALORS Trace("p1=" + MaProcédure.p1) SINON Erreur(HErreurInfo()) FIN
Remarques - Les variables déclarées doivent être identiques à celles utilisées. Dans le cas contraire, une erreur WLangage est affichée.
- Dans l'appel à la procédure stockée, il est nécessaire d'utiliser la syntaxe spécifique à la base de données utilisée, y compris pour la syntaxe des paramètres. Ainsi, pour SQL Server, les paramètres sont spécifiés avec la syntaxe @NomParam.
Attention : le caractère "@" doit être suivi d'au moins une lettre (la syntaxe @1 est interdite). Il est possible d'utiliser plusieurs fois le même paramètre. Dans ce cas, la variable correspondante sera ré-utilisée. - Il n'est pas possible de récupérer une procédure stockée qui renvoie des enregistrements (SELECT ... FROM ...), des colonnes.
- Valeur de retour (fonctions) : Pour récupérer la valeur de retour, il faut déclarer une variable et affecter le résultat de la fonction à cette variable.
- Pour exécuter une requête sans que le bind ne soit activé, utiliser la constante hNoBind dans la fonction HExécuteRequêteSQL.
- Utilisation de RAISERROR : Les erreurs de sévérité supérieures à 10 sont fatales. Un RAISERROR d'une erreur inférieur ou égal à 10 ne gère donc pas d'erreur.
Exemple 1 : Procédure stockée avec paramètre de retour La procédure stockée MyProc renvoie dans @res la somme de @p1 et de @p2. La valeur de retour est 2*@res. Le code permettant de créer cette procédure sur le serveur est le suivant : CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output) AS select @res=@p1+@p2 return 2*@res 1. Déclaration de la source de données La source de données permet de manipuler les différentes variables de la procédure à exécuter. MaProcédure est une Source de Données
2. Déclaration des variables utilisées par la procédure La déclaration des variables manipulées par la procédure se fait à partir de la source de données. MaProcédure.p1 = 10 MaProcédure.p2 = 20
Remarque : Il n'est pas obligatoire de déclarer toutes les variables utilisées. Dans cet exemple, la variable utilisée pour connaître le résultat de la procédure n'est pas déclarée. 3. Exécution de la procédure stockée et récupération du résultat Pour exécuter la procédure stockée, il suffit d'utiliser la fonction HExécuteRequêteSQL : SI HExécuteRequêteSQL(MaProcédure,"MaConnexion", hRequêteSansCorrection, ... "MyProc @p1,@p2,@res out") ALORS Trace("res=" + MaProcédure.res) Trace("p1=" + MaProcédure.p1) Trace("p2=" + MaProcédure.p2) SINON Erreur(HErreurInfo()) FIN
Exemple 2 : Fonction stockée avec valeur de retour La fonction stockée MyProc renvoie dans @res la somme de @p1 et de @p2. La valeur de retour est 2*@res. Le code permettant de créer cette procédure sur le serveur est le suivant : CREATE PROCEDURE MyProc(@p1 int, @p2 int, @res int output) AS select @res=@p1+@p2 return 2*@res 1. Déclaration de la source de données La source de données permet de manipuler les différentes variables de la procédure à exécuter. MaProcédure est une Source de Données
2. Déclaration des variables utilisées par la procédure La déclaration des variables manipulées par la procédure se fait à partir de la source de données. MaProcédure.p1 = 10 MaProcédure.p2 = 20
Remarque : Il n'est pas obligatoire de déclarer toutes les variables utilisées. Dans cet exemple, la variable utilisée pour connaître le résultat de la procédure n'est pas déclarée. 3. Exécution de la procédure stockée et récupération du résultat Pour exécuter la procédure stockée, il suffit d'utiliser la fonction HExécuteRequêteSQL : SI HExécuteRequêteSQL(MaProcédure, "MaConnexion", ... hRequêteSansCorrection, "set @res=user.MyProc(@p1,@p2)") ALORS Trace("res=" + MaProcédure.res) Trace("p1=" + MaProcédure.p1) Trace("p2=" + MaProcédure.p2) SINON Erreur(HErreurInfo()) FIN
Documentation également disponible pour…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|