DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / Connecteurs Natifs/Accès Natifs / Connecteur Natif SQL Server
  • 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
WINDEV
WindowsLinuxUniversal Windows 10 AppJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac CatalystUniversal Windows 10 App
Autres
Procédures stockées
Connecteur Natif SQL Server : Récupérer la valeur de sortie d'une procédure stockée
Connecteurs Natifs (Accès Natifs)Disponible uniquement avec ce type de connexion
Présentation
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.
Comment le faire ?

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 :
  1. Déclarer une source de données. Cette source de données contiendra le résultat de la procédure stockée SQL.
  2. 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.
  3. 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
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Appel procédure stockée avec résultat ne marche pas
Bonjour,
J'ai beau essayer avec les exemples présents dans cette page l'appel à une procédure stockée qui renvoie une valeur ne marche pas et donne l'erreur "Valeur de précision non valide". Je précise que j'arrive bien à faire appel à des procédures stockées qui ne renvoient pas de valeur. N'arrivant pas à appeler les miennes j'ai tenté avec l'exemple mais rien n'y fait. Please help? Merci.
Martin GREGOIRE
27 déc. 2022

Dernière modification : 19/07/2022

Signaler une erreur ou faire une suggestion | Aide en ligne locale