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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

TRIGGER FUNCTION


Sujet :

PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Avril 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 1
    Par défaut TRIGGER FUNCTION
    Bonjour,

    je possède une table client dont la primary key est ref_client.
    Le format de la clef primaire est CLIXXXX. Mon souci est d'incrémenter automatiquement à chaque insertion dans la table client, la clé primaire CLIXXXX. J'ai eu idée (en lisant le cours SQL de A à Z) de créer une table supplémentaire répertoriant la dernière valeur numérique de la clé primaire de ma table client.

    Je souhaite faire un trigger déclenché avant l'insertion dans la table client. Ce trigger récupère cette dernière valeur numérique, l'incrémente, la concatène avec la chaîne CLI et l'insère dans CLIENT.

    Mais j'ai quelques problèmes avec les triggers et les fonctions sous postgresql.
    Il me réclame un type trigger. J'ai vu qu'il fallait mettre OPAQUE. Mais ensuite seul language 'plpgsql' semble être autorisé. Or moi il me dit language inconnu, j'ai pourtant installé le rpm correspondant.

    Merci de m'aider.
    Nico

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 89
    Par défaut
    Bonjour,

    Tout d'abord il faut initialiser le PL/pgSQL de la maniere suivante:

    createlang plpgsql votredb

    ensuite créez votre trigger qui va déclencher votre fonction:

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TRIGGER concat BEFORE INSERT
    	ON table FOR EACH ROW
    EXECUTE PROCEDURE concat();
    ensuite voici un exemple de concaténation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    CREATE FUNCTION concat() RETURNS opaque AS '
     
    	BEGIN
     
     
    		UPDATE ONLY table
    		SET champ1 =  table.champ2 || articles_tbl.champ3
     
    		FROM ...
     
    		WHERE  ...;;
     
    		RETURN NEW;
    	END;
     
      'LANGUAGE 'plpgsql';
    et la un exemple d'incrémentation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE FUNCTION numero() RETURNS opaque AS '
     
    	BEGIN
    	UPDATE table
    		SET numero=table.champs+1
     
    		FROM .....
     
    		WHERE .....;
     
    		RETURN NEW;
    	END;
     
      'LANGUAGE 'plpgsql';
    Vous allez peut être rencontrer un probleme de position de curseur en fonction de ce que vous souaitez concaténer, je l'ai finalement résolu de la maniere suivante:

    http://www.developpez.net/forums/viewtopic.php?t=192538

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Par défaut
    tu devrais utiliser pour ta colonne clé un type de données adéquat comme serial ou bigserial qui sont autoincrémentés à chaque nouvelle ligne.

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2004
    Messages
    306
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 306
    Par défaut
    Salut,

    merci pour vos réponses. J'ai réussi à mettre en place ce que je voulais. Par contre pour le type serial je n'ai pas essayé. Ca marche avec un suffixe en caractère ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 89
    Par défaut
    De nada, n'oublie pas le tag résolu

    @peluche

Discussions similaires

  1. Trigger + function
    Par Eva06 dans le forum Oracle
    Réponses: 3
    Dernier message: 06/05/2013, 09h43
  2. Trigger function update sur champs XML
    Par ldiaz dans le forum SQL Procédural
    Réponses: 24
    Dernier message: 20/06/2012, 17h01
  3. Trigger et function perso ?
    Par brolon dans le forum PL/SQL
    Réponses: 2
    Dernier message: 04/02/2009, 14h58
  4. Réponses: 0
    Dernier message: 24/06/2008, 23h51
  5. function & trigger
    Par bigre dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/11/2007, 03h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo