IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ FirebirdConsultez toutes les FAQ

Nombre d'auteurs : 6, nombre de questions : 205, dernière mise à jour : 15 septembre 2014  Ajouter une question

 

Cette faq a été réalisée à partir des questions fréquement posées sur les forums Firebird de http://www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette F.A.Q. ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette F.A.Q. ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci

Sur ce, nous vous souhaitons une bonne lecture.
L'équipe Firebird de Developpez.com

SommaireLes procédures stockées (5)
précédent sommaire suivant
 

Les procédures stockées permettent de faire des traitements sur le serveur (et non sur le client). Ce traitement est enregistré dans la base de données et est exécuté sur demande par le serveur. Les avantages des procédures stockées sont : des exécutions plus rapides car le serveur (généralement) est plus puissant que les clients, des optimisations d'accés plus précisément d'accès aux données , et restreindre la charge du réseau.

Mis à jour le 20 juin 2005 Barbibulle

La création d'une procédure se fait en SQL (DDL plus exactement) comme pour la création de table.

Code SQL : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE PROCEDURE MA_PROCEDURE_IU ( 
  ID INTEGER, 
  TEST INTEGER) 
AS 
BEGIN 
  IF (EXISTS(SELECT  FROM MA_TABLE WHERE )) THEN 
    UPDATE MA_TABLE 
    SET ID = :ID, 
        TEST = :TEST 
    WHERE 
  ELSE 
    INSERT INTO MA_TABLE ( 
        ID, 
        TEST) 
    VALUES ( 
        :ID, 
        :TEST); 
END
Cette procédure va insérer un élément dans la table ou le modifier s'il existe déjà. Pour pouvoir créer cette procédure avec ISQL ou IBConsole il faut précéder le CREATE de la ligne suivante :

Code SQL : Sélectionner tout
SET TERM ^;
Qui a pour effet de dire à Interbase que la fin de l'instruction qui suit est ^ (sinon c'est le ; qui définit la fin d'instruction) On placera un ^ juste après le dernier END de la procédure et terminera par remettre le ; comme fin d'instruction avec le code suivant :

Code SQL : Sélectionner tout
SET TERM ;^

Mis à jour le 20 juin 2005 Barbibulle

Pour supprimer une procédure c'est assez simple :

Code SQL : Sélectionner tout
DROP PROCEDURE MaProcedure;

Mis à jour le 20 juin 2005 Barbibulle

Il existe plusieurs façons d'utiliser une procédure stockée, soit dans un ordre SQL soit dans une autre procédure stockée. En SQL comme une table ou une vue (qui aurait ou non des paramètres d'entrée)

Code SQL : Sélectionner tout
1
2
Select ParametreRetour1, ParametreRetour2  
from MaProcedure(ParametreEntree1) where Critères...
Dans une procédure stockée il y a plusieurs cas de figure : La procédure que l'on appelle ne retourne pas de paramètres :

Code SQL : Sélectionner tout
1
2
EXECUTE PROCEDURE MaProcedure(:Parametre1,  
:Parametre2);
Si elle ne retourne qu'un enregistrement

Code SQL : Sélectionner tout
1
2
EXECUTE PROCEDURE MaProcedure(:Parametre1,  
:Parametre2) RETURNING_VALUES :ID, :TEST;
ou

Code SQL : Sélectionner tout
1
2
Select ID, TEST from  
MaProcedure(:Parametre1, :Parametre2) where .... into :ID, :TEST;
S'il y a plusieurs lignes en retour :

Code SQL : Sélectionner tout
1
2
3
FOR Select ID, TEST from  
MaProcedure(:Parametre1, :Parametre2) where .... into :ID, :TEST DO 
Instruction à faire pour chacune des lignes

Mis à jour le 20 juin 2005 Barbibulle

Quand vous écrivez du code PSQL (procédures, triggers , blocs d'exécution) vous pouvez vouloir sortir d'une boucle WHILE ou FOR..DO. Si vous connaissez un langage de programmation tel C ou autres, vous allez certainement rechercher une instruction BREAK ou EXIT. Firebird utilise LEAVE

Code SQL : Sélectionner tout
1
2
3
4
5
6
FOR SELECT EMP_NO FROM EMPLOYEE e INTO :EMPNO DO 
BEGIN 
/* faire quelque chose */ 
if (empno > 50) then leave; 
/* faire autre chose*/ 
END

Dans le cas ou vous auriez des boucles imbriquées, LEAVE avec étiquettes permet d'indiquer de quelle boucle (à quel niveau) vous voulez sortir. Pour plus d'informations et exemples , lisez le fichier 'README.leave_labels' dans le sous-répertoire 'sql.extensions' du répertoire 'docs' de votre installation Firebird

LEAVEavec étiquettes existe a partir de Firebird 2.0, pour les versions plus anciennes vous devrez écrire vos boucles différemment ? probablement avec des blocs BEGIN..END importants qui empêcheront le reste du code de s'exécuter.
Traduction réalisée depuis http://www.firebirdfaq.org/faq332/

Mis à jour le 3 janvier 2009 SergioMaster

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2024 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.