- Présentation
- Créer une procédure stockée et une requête stockée
- La création de procédures stockées est effectuée dans l'analyse.
- Importer une collection de procédures existante
- Utiliser une requête dans une procédure stockée
- Code WLangage utilisable dans les procédures stockées
- Procédures stockées compilables en 64 bits
- Tester une procédure stockée
- Limite
- Déployer une procédure stockée et les requêtes stockées associées
- Présentation
- Déployer pour test
- Déployer en réel
- Mise à jour à chaud des procédures stockées sur le serveur HFSQL
- Exécuter une procédure stockée dans vos programmes
- Exécution d'une procédure stockée depuis une requête SQL
- Gestion des erreurs dans les procédures stockées
- Mécanisme des sous-erreurs
- Codes d'erreur pouvant être rencontrés dans les procédures stockées
Procédures et requêtes stockées (HFSQL Client/Serveur)
Disponible uniquement avec ce type de connexion
Les procédures stockées permettent de simplifier l'évolution et la maintenance de vos applications en factorisant le code. En effet, lorsque la façon d'accéder aux données évolue (suite à un changement de structure de fichiers par exemple), il suffit de modifier la procédure stockée sur le serveur sans effectuer de modification dans les applications déployées qui utilisent cette procédure. Une procédure stockée permet également de limiter le nombre d'allers et retours entre le poste client et le serveur, et donc améliore la vitesse des traitements. Les procédures stockées peuvent utiliser des requêtes SQL ou des requêtes créées avec l'éditeur de requêtes. La création des procédures stockées et des requêtes utilisées par les procédures stockées est effectuée dans l'éditeur d'analyses. Cette page d'aide présente : Créer une procédure stockée et une requête stockée La création de procédures stockées est effectuée dans l'analyse. Pour créer une procédure stockée : - Créez si nécessaire la collection de procédures stockées dans l'analyse :
- soit cliquez sur parmi les boutons d'accès rapide.
- La fenêtre de création d'un nouvel élément s'affiche : cliquez sur "Données" puis sur "Collection de procédures stockées".
- Saisissez le nom de la collection de procédures et validez.
- soit par le volet "Analyse" : sélectionnez le dossier "Procédures stockées". Dans le menu contextuel, sélectionnez l'option "Nouvelle collection de procédures". La collection de procédures stockées est automatiquement créée. Par défaut, cette collection de procédures a pour nom "Collection_<Nom analyse>".
- soit dans le ruban de l'éditeur d'analyses : sous le volet "Analyse", dans le groupe "Création", déroulez "Nouveau" et sélectionnez "Collection de procédures stockées". La collection de procédures stockées est automatiquement créée. Par défaut, cette collection de procédures a pour nom "Collection_<Nom analyse>".
- Cette collection est enregistrée physiquement dans le sous-répertoire "Code" du répertoire de l'analyse.
- Créez une procédure dans la collection de procédures. Cette procédure sera une procédure stockée.
Importer une collection de procédures existante Une collection de procédures stockées peut correspondre à une collection de procédures existante (dans le projet en cours, ou dans un autre projet). Pour importer une collection de procédures : - Ouvrez si nécessaire l'éditeur d'analyses.
- Dans le volet "Analyse", sélectionnez le dossier "Procédures stockées".
- Affichez le menu contextuel et sélectionnez l'option "Importer une collection de procédures". Dans la fenêtre qui s'ouvre, sélectionnez la collection de procédures à importer et validez.
- Les opérations effectuées sont les suivantes :
- Si la collection de procédures appartient au projet en cours : la collection de procédures du projet est automatiquement recopiée dans le répertoire "Code" de l'analyse. Le nom logique de cette procédure est automatiquement renommé.
Attention : Les deux collections de procédures sont dissociées : une modification effectuée dans la collection de procédures du projet ne sera pas reportée dans la collection de procédures de l'analyse et inversement. - Si la collection de procédures n'appartient pas au projet en cours : la collection de procédures est automatiquement recopiée dans le répertoire "Code" de l'analyse, et définie comme procédure stockée.
Utiliser une requête dans une procédure stockée Vous pouvez utiliser une requête créée avec l'éditeur de requêtes dans une procédure stockée. Pour cela, la création de la requête doit avoir été effectuée depuis l'éditeur d'analyses. Pour créer une requête dans l'éditeur d'analyses : - Méthode 1 :
- Cliquez sur parmi les boutons d'accès rapide.
- La fenêtre de création d'un nouvel élément s'affiche : cliquez sur "Données" puis sur "Requête stockée".
- L'assistant de création d'une requête est automatiquement lancé. La requête est automatiquement créée. La requête est enregistrée physiquement dans le sous-répertoire "Code" du répertoire de l'analyse.
- La requête peut être utilisée dans une des procédures stockées de l'analyse.
- Méthode 2 :
- Affichez l'éditeur d'analyses.
- Affichez le volet "Analyse" et sélectionnez l'option "Nouvelle requête" du menu contextuel. L'assistant de création d'une requête est automatiquement lancé. La requête est automatiquement créée. La requête est enregistrée physiquement dans le sous-répertoire "Code" du répertoire de l'analyse.
- La requête peut être utilisée dans une des procédures stockées de l'analyse.
Pour importer une requête : - Ouvrez si nécessaire l'éditeur d'analyses.
- Dans le volet "Analyse", sélectionnez le dossier "Requêtes".
- Dans le menu contextuel, sélectionnez l'option "Importer une requête". Dans la fenêtre qui s'ouvre, sélectionnez la requête à importer et validez.
- Les opérations effectuées sont les suivantes :
- Si la requête appartient au projet en cours : la requête du projet est automatiquement recopiée dans le répertoire "Code" de l'analyse, et relocalisée : une seule requête est utilisée par le projet et l'analyse. Ainsi une modification effectuée dans la requête du projet sera automatiquement reportée dans la requête de l'analyse et inversement.
- Si la requête n'appartient pas au projet en cours : la requête est automatiquement recopiée dans le répertoire "Code" de l'analyse, et définie comme requête liée à l'analyse.
Code WLangage utilisable dans les procédures stockées - Le code des procédures stockées est écrit en WLangage. Il est possible d'utiliser un grand nombre de fonctions du WLangage.
- Pour savoir si une fonction est utilisable ou non dans une procédure stockée, il suffit de consulter l'aide de cette fonction : si l'image est affichée dans la barre de titre de la fonction, la fonction est utilisable dans le code des procédures stockées.
De plus, lors de la compilation du code, des messages d'erreur vous informent de l'utilisation de fonctions non autorisées dans le code des procédures stockées. Par exemple, seuls les types simples peuvent être utilisés dans le code des procédures stockées (Chaînes, entiers, ...). Un paramètre de procédure stockée doit être de type simple : un objet ou un tableau ne peut pas être passé en paramètre. Il est cependant possible d'utiliser la fonction Sérialise par exemple pour passer un tableau en paramètre à une procédure stockée. - Il n'est pas possible d'utiliser dans des procédures stockées : des classes, des états, des fenêtres, des pages, ...
- Les fenêtres/pages de gestion automatique des erreurs ne sont pas disponibles dans les procédures stockées. Il est cependant possible d'utiliser la fonction HSurErreur pour rediriger l'erreur sur une procédure (cette procédure doit également être une procédure stockée).
- Plusieurs variables WLangage permettent à partir d'une procédure stockée d'obtenir des renseignements sur l'application cliente l'utilisant.
Ces variables sont les suivantes :
| | HInfoExécution.Application | Application cliente qui a lancé la procédure stockée en cours. | HInfoExécution.Base | Base manipulée par l'application cliente qui a lancé la procédure stockée en cours. | HInfoExécution.Login | Login de l'utilisateur de l'application cliente qui a lancé la procédure stockée en cours. | HInfoExécution.Machine | Poste de l'utilisateur qui a lancé la procédure stockée en cours (adresse IP ou nom du poste). |
- Il est possible de sauvegarder des valeurs sur le serveur à partir d'une procédure stockée. Cette valeur pourra être relue par une autre procédure stockée ou par un trigger par exemple. Les fonctions permettant de gérer les valeurs persistantes sur le serveur sont les suivantes :
- Il est possible d'enregistrer des fichiers temporaires dans un répertoire du serveur et de purger ce répertoire. Les fonctions utilisables sont les suivantes :
- Pour manipuler des fichiers de données, il faut utiliser la fonction HDéclareExterne.
Par exemple :
PROCÉDURE NomDeLaProcédureStockée()
SI PAS HFichierExiste(CODEPOSTAUX) ALORS
SI PAS HDéclareExterne("CODEPOSTAUX.FIC", "CODEPOSTAUX") ALORS
RENVOYER HErreurInfo()
FIN
FIN
RENVOYER ""
Procédures stockées compilables en 64 bits Pour utiliser un exécutable 32 bits avec des procédures stockées s'exécutant sur un serveur 64 bits : - Affichez la fenêtre de description de l'analyse.
- Ouvrez si nécessaire l'éditeur d'analyses.
- Affichez le menu contextuel de l'analyse (clic droit sur le graphe de l'analyse) et sélectionnez l'option "Description de l'analyse".
- Affichez l'onglet "Compilation".
- Cochez l'option "Activer les erreurs de compilation pour la compatibilité 64 bits".
- Validez.
Tester une procédure stockée Pour tester une procédure stockée : - Sélectionnez la procédure stockée à tester dans le volet de l'analyse.
- Affichez le menu contextuel de la procédure stockée (clic droit) et sélectionnez l'option "Tester la procédure".
- La fenêtre de saisie des paramètres de la procédure s'affiche. Dans cette fenêtre, il est possible de :
- Saisir les paramètres de la procédure.
- Lancer le test de la procédure.
Remarque : cette fenêtre peut être utilisée pour relancer plusieurs fois l'exécution en modifiant les paramètres.
- Lorsque le test de la procédure est lancé :
- Une mise à jour de la procédure stockée sur le serveur est proposée si nécessaire.
- La procédure est lancée sur le serveur.
- La valeur de retour de la procédure est affichée si nécessaire.
Remarques/limitations : - Le port de débogage est le port 27281 par défaut. Il est nécessaire d'ouvrir ce port dans le firewall. Ce port peut être modifié dans le fichier HFConf.ini. Pour plus de détails sur le débogage des procédures stockées, consultez Déboguer une connexion à un serveur HFSQL.
- Pour lancer le test d'une procédure stockée, il est nécessaire d'avoir le droit de débogage sur la base de données.
- Les traces utilisées dans les procédures stockées sont affichées dans le volet Trace du débogueur.
- Le code de la procédure stockée peut contenir des points d'arrêt : le débogueur sera alors lancé.
- Les éléments déployés sur le serveur sont utilisés lors du test.
- La fonction EnModeTest renvoie Vrai.
Limite Dans cette version, il n'est pas possible d'importer une collection de procédures stockées existante sur un serveur. Déployer une procédure stockée et les requêtes stockées associées Présentation Pour tester et/ou exécuter une procédure stockée, il est nécessaire de la déployer sur le serveur. Ce déploiement peut être effectué : - pour test : les procédures stockées et/ou les requêtes sont déployées sur le serveur choisi, mais l'analyse n'est pas mise à jour. Cette manipulation est conseillée par exemple si l'analyse est très importante et demande une génération relativement longue.
Attention : si une application est déployée sur le serveur, celle-ci pourra ne plus fonctionner après ce déploiement pour test. Cette option est à utiliser sur un serveur de test. - réellement : l'analyse doit être re-générée et la modification automatique des fichiers de données doit être effectuée lors de l'installation de la version cliente.
Déployer pour test Pour tester rapidement les modifications effectuées dans une procédure stockée : - Dans l'éditeur d'analyses, sous le volet "Analyse", dans le groupe "Analyse", déroulez "Synchronisation" et sélectionnez "Mettre à jour les éléments stockés (HFSQL Client/Serveur)".
- Dans la fenêtre qui s'affiche, sélectionnez :
- les collections de procédures à mettre à jour.
- les requêtes à mettre à jour.
- les triggers à mettre à jour.
- la connexion concernée par la mise à jour. Il est également possible de saisir directement les caractéristiques de la connexion.
- Validez la mise à jour.
Remarque : Pour déployer pour tests, vous pouvez également générer l'analyse et accepter la modification automatique des données. Déployer en réel Pour mettre à jour une application Client/Serveur utilisant des procédures stockées, il est nécessaire d'effectuer les manipulations suivantes : - Générer l'analyse contenant les procédures stockées (option "Génération de l'analyse" du menu contextuel de l'analyse). Une modification des fichiers de données peut être effectuée lors de cette étape.
- Créer la version Client en demandant une modification automatique des fichiers de données : sous le volet "Projet", dans le groupe "Génération", déroulez "Procédure d'installation" et sélectionnez "Créer la procédure d'installation".
Remarque : il suffit de modifier le code des procédures stockées ou les requêtes de l'analyse pour qu'une modification automatique des fichiers de données soit proposée. - Installer l'application.
Remarques : - Les fonctions WLangage HMiseAJourCollection et HSupprimeCollection permettent de forcer par programmation la mise à jour et la suppression de collections de procédures stockées sur le serveur.
- Les fonctions WLangage HMiseAJourRequête et HSupprimeRequête permettent de forcer par programmation la mise à jour et la suppression des requêtes stockées sur le serveur.
- La fonction HListeElémentStocké permet de lister les collections de procédures, les requêtes et les procédures installées sur un serveur.
- Le Centre de Contrôle HFSQL permet de gérer les procédures stockées et les requêtes présentes sur le serveur.
Mise à jour à chaud des procédures stockées sur le serveur HFSQL La mise à jour à chaud des procédures stockées sur le serveur HFSQL consiste à mettre à jour les collections de procédures stockées sur le serveur alors que l'application est en cours d'utilisation. Cette manipulation permet de faire une mise à jour sans déconnecter tous les utilisateurs. Cette mise à jour peut être effectuée grâce à la fonction HMiseAJourCollection. Les conditions dans lesquelles cette mise à jour peut être effectuée sont les suivantes : - Si aucune procédure de la collection n'a été lancée, la collection de procédures peut être mise à jour sur le serveur.
- Si une procédure de la collection a été lancée, la collection de procédures peut être mise à jour uniquement si la modification de la collection de procédure ne concerne pas les variables globales. Si les variables globales de la collection de procédures ont été modifiées, la fonction HMiseAJourCollection renvoie Faux. Dans ce cas, il est nécessaire de déconnecter tous les utilisateurs pour effectuer la mise à jour.
Attention : Dans ce dernier cas, si la mise à jour a été effectuée, les utilisateurs connectés avant la mise à jour utiliseront lors de la prochaine exécution d'une procédure stockée :- le nouveau code de la procédure stockée,
- les variables globales avec les valeurs définies avant la mise à jour.
Remarque : Si une procédure de la collection de procédures est en cours d'exécution, la mise à jour est bloquée en attendant la fin de l'exécution de la procédure (la fonction HMiseAJourCollection est bloquante). Toutes les procédures stockées en cours d'exécution sont terminées, et toutes les procédures stockées appelées après l'exécution de la fonction HMiseAJourCollection sont bloquées jusqu'à la mise à jour de la collection sur le serveur. Exécuter une procédure stockée dans vos programmes Le lancement d'une procédure stockée depuis une application peut être effectué : Exécution d'une procédure stockée depuis une requête SQL Pour exécuter une procédure stockée depuis une requête SQL, il suffit de préciser dans la requête le nom de la procédure à exécuter et les paramètres à lui passer. Il est également possible d'exécuter directement une procédure stockée et de récupérer son résultat en SQL. Dans ce cas, la syntaxe pour exécuter la procédure stockée est la suivante :
SELECT NomDeLaProcédureSockée(ParametreNumérique,'ParametreChaîne',....) [FROM DUAL] Remarques : - La procédure stockée doit être une fonction stockée : elle doit toujours renvoyer une valeur. Dans le cas contraire, une erreur d'exécution sera générée.
- Si le nom de la procédure stockée est identique à celui d'une fonction ou procédure du projet, il est nécessaire de préfixer son nom par le nom de la collection de procédures stockées.
Exemple 1 : La requête suivante permet d'obtenir le chiffre d'affaires de tous les clients du département 34. Le calcul du chiffre d'affaires est réalisé par une procédure stockée, nRenvoieCA.
HExécuteRequêteSQL("CAClient34", "SELECT NomClient, CodePostal, " + ...
"nRenvoieCA(Client.NumClient,'20061201') " + ...
"as Total from Client where codepostal like '34%')")
PROCÉDURE nRenvoieCA(nNumClient, DateLimite)
nTotal est un monétaire
HFiltre(Commande, NumClient, hValMin, hValMax, "DateCommande >= '" + DateLimite + "'")
HLitRecherchePremier(Commande, NumClient, nNumClient)
TANTQUE HTrouve(Commande)
nTotal += Commande.TotalTTC
HLitSuivant(Commande, NumClient)
FIN
RENVOYER nTotal
Exemple 2 : Exécution et récupération du résultat d'une procédure stockée :
sdProcStock est une Source de Données
SI PAS HExécuteRequêteSQL(sdProcStock, CnxHFSQL, hRequêteDéfaut, ChaîneConstruit([
SELECT Fonction_ProcédureStockée(%1,'%2')
FROM DUAL
], 3, "chaîne à passer en paramètre")) ALORS
Erreur("Echec de l'appel à la procédure stockée ", HErreurInfo())
SINON
SI HLitPremier(sdProcStock) ALORS
Info("Résultat de la procédure stockée : ", HEnregistrementVersChaîne(sdProcStock))
FIN
FIN
Gestion des erreurs dans les procédures stockées Mécanisme des sous-erreurs La gestion des erreurs dans les procédures stockées utilise le mécanisme des sous-erreurs. Lors de l'exécution d'une procédure stockée sur le serveur, en cas d'erreur, les différentes sous-erreurs sont remplies avec les informations des erreurs rencontrées à chaque niveau d'exécution. Les différentes erreurs peuvent être connues avec la fonction ExceptionInfo. Voici quelques exemples simples : 1. Une procédure est exécutée sur le client. Cette procédure appelle une procédure stockée sur le serveur. Cette procédure stockée génère une erreur. Application cliente :
PROCÉDURE Procédure_Client()
...
HExécuteProcédure(UneConnexion, UneProcédureStockée)
Application serveur :
PROCÉDURE UneProcédureStochée
...
RENVOYER ElementInconnu
L'exception est affichée uniquement sur le poste client. Elle contient les informations suivantes : - Erreur principale : informations concernant la partie cliente : "Erreur remontée par le serveur XXX", Procédure Procédure_Client, Ligne 10, ...
- Sous-Erreur : informations concernant la partie serveur : "Identificateur ElementInconnu inconnu", Procédure UneProcédure, Ligne 5, ...
2. Une procédure est exécutée sur le client. Cette procédure appelle une procédure stockée sur le serveur. Cette procédure stockée appelle une seconde procédure qui génère une erreur. Application cliente : PROCÉDURE Procédure_Client()
...
HExécuteProcédure(UneConnexion, UneProcédureStockée)
Application serveur :
PROCÉDURE UneProcédureStochée
...
HExécuteRequêteSQL(UneRequête, "SELECT ProcédureCalcul(Fic.Rub) FROM Fic")
POUR TOUT UneRequête
...
FIN
PROCÉDURE ProcédureCalcul(param)
...
RENVOYER ElementInconnu
L'exception est affichée uniquement sur le poste client. Elle contient les informations suivantes : - Erreur principale : informations concernant la partie cliente : "Erreur remontée par le serveur XXX", Procédure Procédure_Client, Ligne 10, ...
- Sous-Erreur 1 : informations de la partie serveur concernant la procédure UneProcédureStockée : "Erreur pendant l'exécution de la requête", procédure UneProcédureStockée, ligne 5, ...
- Sous-Erreur 2 : informations de la partie serveur concernant la procédure ProcédureCalcul : "Identificateur ElementInconnu inconnu", procédure ProcédureCalcul, ligne 4, ...
Remarque : Pour obtenir directement la dernière sous-erreur (c'est-à -dire la première erreur qui s'est déclenchée sur le serveur HFSQL), utilisez la syntaxe suivante :
ExceptionInfo(errMessage, errOrigine)
Codes d'erreur pouvant être rencontrés dans les procédures stockées Les erreurs suivantes peuvent être rencontrées lors de l'exécution des procédures stockées : 75000 : Le serveur ne peut déterminer si la procédure XXX doit être exécutée Cette erreur peut apparaître dans les cas suivants : - Une procédure stockée de même nom est utilisée avec plusieurs bases de données, et plusieurs connexions. Le serveur ne peut pas déterminer si la procédure XXX doit être exécutée avec la connexion YYY sur la base de données ZZZ ou avec la connexion YYY1 sur la base de données ZZZ1.
Solution : Spécifier la connexion et la base de données à utiliser. - Deux connexions à la base de données sont disponibles. Le serveur ne peut pas déterminer si la procédure XXX sur la base de données ZZZ doit être exécutée avec la connexion YYY ou avec la connexion YYY1.
Solution : Spécifier la connexion à utiliser - La procédure est utilisée dans plusieurs collections de procédures.
75001 : La base de données n'a pas été précisée Cette erreur peut apparaître si plusieurs bases de données existent pour une même connexion. Pour exécuter la procédure stockée XXX, il est nécessaire de préciser une base de données dans la connexion utilisée. 75002 : Procédure stockée non trouvée Cette erreur apparaît si la procédure appelée n'est pas présente dans les collections de procédures installées sur le serveur. 75003 : Une erreur WLangage s'est produite pendant l'exécution de la procédure stockée Cette erreur apparaît si la procédure stockée contient des erreurs WLangage. 75004 : L'élément XXX n'existe pas La procédure stockée ou la requête stockée indiquée n'existe pas. 75005 : Mise à jour de l'élément XXX impossible. La procédure stockée ou la requête stockée est en cours d'utilisation. Pour mettre à jour cet élément, il est nécessaire de déconnecter les utilisateurs. 75006 : Collection de procédures incompatible avec les serveurs 64 bits La collection de procédures est utilisée sur un serveur 64 bits. Pour que cette collection de procédures puisse fonctionner, il est nécessaire de sélectionner l'option "Activer les erreurs de compilation pour la compatibilité 64 bits" (option "Description de l'analyse" du menu contextuel de l'analyse, onglet "Compilation").
Documentation également disponible pour…
|
|
|