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 :

Creation de triggers application en java


Sujet :

PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 53
    Points
    53
    Par défaut Creation de triggers application en java
    Bonjour à tous j'ai trois tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE t_list
    (
      list_id serial NOT NULL,
      list_type_id integer NOT NULL,
     -- ...
    )
    table customer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE t_customer
    (
      cust_id serial NOT NULL,
      cust_first_name character varying(50) NOT NULL,
      cust_last_name character varying(50) NOT NULL,
      cust_email character varying(50),
    --...
    )
    table de jointure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE t_cust_list
    (
      cust_list_id serial NOT NULL,
      list_id serial NOT NULL,
      cust_id integer NOT NULL,
    --...
    )
    j'aimerai créer un trigger qui permet après création ou suppression d'une nouvelle list d'inserer une ligne list_id et cust_id dans la table t-cust_list
    voila ce que je fais
    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
    17
    18
    19
    20
    21
    22
    CREATE FUNCTION CustList_Trigger() RETURNS trigger AS $t_cust_list$
     
     --
        -- Ajoute une ligne dans t-cust_list pour refléter l'opération réalisée
        -- sur t_list,
        -- utilise la variable spéciale TG_OP pour cette opération.
        --
     
      BEGIN
        IF (TG_OP = 'INSERT') THEN
         INSERT INTO t_cust_list SELECT list_id, cust_id, NEW.*;
         RETURN NEW;
        ELSIF (TG_OP = 'DELETE') THEN
         INSERT INTO t_cust_list SELECT list_id, cust_id, NEW.*;
         RETURN NEW;    
        END IF;
     
      END;
    $t_cust_list$ language plpgsql;
     
    CREATE TRIGGER CustList_Trigger BEFORE INSERT OR UPDATE ON t_list
        FOR EACH ROW EXECUTE PROCEDURE CustList_Trigger();
    et voici l'erreur que j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ERREUR:  le langage « plpgsql » n'existe pas
    HINT:  Utiliser CREATE LANGUAGE pour charger le langage dans la base de données.
     
    ********** Error **********
     
    ERREUR: le langage « plpgsql » n'existe pas
    SQL state: 42704
    Hint: Utiliser CREATE LANGUAGE pour charger le langage dans la base de données.
    Quelqu'un a-til une idée de comment creer de nouveau lagange

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Il faut lancer la commande SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create language plpgsql;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    Merci estofilo, ça marche . cependant mon tigger ne fait pas ce que je veux car j'ai cette erreur quelqu'un aurai t'il une idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ause racine
     
    Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.1 (Build b60e-fcs (12/23/2008))): oracle.toplink.essentials.exceptions.DatabaseException
    Internal Exception: org.postgresql.util.PSQLException: ERREUR: la colonne « list_id » n'existe pas
    Error Code: 0
    Call: INSERT INTO t_list (LIST_ID, list_av_amount, list_status, list_creation_date, list_event_date, list_type_id) VALUES (?, ?, ?, ?, ?, ?)
    	bind => [4051, 0.0, en cours, 2010-02-04, 2010-08-29, 6]
    Query: InsertObjectQuery(be.isl.ListeCadeaux.entity.ListeCadeaux@11cb73a)

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Dans le code du trigger il y a cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO t_cust_list SELECT list_id, cust_id, NEW.*;
    qui est invalide.
    D'une part comme il n'y a pas de from dans le select, le list_id et cust_id ne se réfèrent à rien. D'autre part j'imagine que l'intention avec le NEW.* est de dire "toutes les colonnes de l'enregistrement NEW" mais il n'est pas possible de faire comme ça, il faudrait lister explicitement les colonnes.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 53
    Points
    53
    Par défaut
    Merci de ta réponse en fait la table t_list ne possède pas d'attribut cust_id et donc ce trigger ne saurait pas fonctionner et faire ce que je veux. j'abandonne ce test pour mon appli car ça ne saurait fonctionner

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2006, 21h47
  2. Oracle - Trigger et Code Java
    Par cdryk dans le forum PL/SQL
    Réponses: 3
    Dernier message: 03/03/2006, 15h17
  3. [PL/SQL] Creation de triggers dans transaction
    Par globeriding dans le forum Oracle
    Réponses: 15
    Dernier message: 07/02/2006, 11h33
  4. [WinDev] Creation d'une application PDA
    Par mic0331 dans le forum Windev Mobile
    Réponses: 1
    Dernier message: 28/07/2005, 15h58
  5. creation de trigger
    Par mitsubi dans le forum SQL
    Réponses: 3
    Dernier message: 12/09/2003, 15h13

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