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

Requêtes PostgreSQL Discussion :

Problème TRIGGER Before Insert


Sujet :

Requêtes PostgreSQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 33
    Points
    33
    Par défaut Problème TRIGGER Before Insert
    Bonjour,

    Pour mon apprentissage du PostgreSQL, j'ai un exercice où je dois vérifier des données avant insertion dans un table avec un trigger.

    Ne sachant pas comment m'y prendre, je cherche un peu et trouve un exemple que voici:
    http://www.java2s.com/Tutorial/Oracl...erttrigger.htm

    Je m'inspire de cet exemple et écris ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE OR REPLACE TRIGGER check_station_data
    BEFORE INSERT ON station
    FOR EACH ROW
    BEGIN
      -- check
      IF :NEW.nom IS NULL
        THEN RAISE_APPLICATION_ERROR(-20000, 'nom vide');
      END IF;
    END;
     
    INSERT INTO station VALUES(default, '', -59, 'France');
    Seulement, voila toutes les errues me sautant à la figure, alors que tout me parrait correcte:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    psql:projet.sql:177: ERREUR:  erreur de syntaxe sur ou près de « TRIGGER »
    LIGNE 1 : CREATE OR REPLACE TRIGGER check_station_data
                                ^
    psql:projet.sql:178: ERREUR:  erreur de syntaxe sur ou près de « IF »
    LIGNE 1 : END IF;
                  ^
    psql:projet.sql:179: ATTENTION:  aucune transaction en cours
    COMMIT
    INSERT 0 1
    Avez-vous une idée de se qui m'échappe ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Je ne crois pas que PG accepte la syntaxe CREATE OR REPLACE, essayez avec seulement CREATE.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 33
    Points
    33
    Par défaut
    Si j'enlève le "OR REPLACE", j'obtient ces erreurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    psql:projet.sql:177: ERREUR:  erreur de syntaxe sur ou près de « BEGIN »
    LIGNE 4 : BEGIN
              ^
    psql:projet.sql:178: ERREUR:  erreur de syntaxe sur ou près de « IF »
    LIGNE 1 : END IF;
                  ^
    psql:projet.sql:179: ATTENTION:  aucune transaction en cours
    COMMIT
    INSERT 0 1

  4. #4
    Membre averti
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Points : 433
    Points
    433
    Par défaut
    Citation Envoyé par Zyxcel314 Voir le message
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE OR REPLACE TRIGGER check_station_data
    BEFORE INSERT ON station
    FOR EACH ROW
    BEGIN
      -- check
      IF :NEW.nom IS NULL
        THEN RAISE_APPLICATION_ERROR(-20000, 'nom vide');
      END IF;
    END;
     
    INSERT INTO station VALUES(default, '', -59, 'France');
    Avez-vous une idée de se qui m'échappe ?
    Avec PostgreSQL
    - Il faudra créer la fonction à exécuter
    - Puis le trigger qui va déclencher la dite fonction


    Table station
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE TABLE station (
    	station_id serial primary key,
    	nom varchar(100),
    	dodo smallint,
    	pays varchar(100)
    );
    Fonction à exécuter
    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 OR REPLACE FUNCTION check_station_data()
    RETURNS trigger AS
    $BODY$
    BEGIN
     
      IF NEW.nom IS NULL THEN
         RAISE 'Nom vide pour la station : %', NEW.station_id
         USING ERRCODE = '20000';
      END IF;
     
      RETURN NEW;
     
    END;
    $BODY$
    LANGUAGE PLPGSQL;
    Trigger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CREATE TRIGGER check_station_data_trigger
      BEFORE INSERT
      ON station
      FOR EACH ROW
      EXECUTE PROCEDURE check_station_data();
    Test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO station (nom, dodo, pays) VALUES ( null, -59, 'France' );

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2018
    Messages : 31
    Points : 33
    Points
    33
    Par défaut
    Merci manzeki pour ta précieuse aide

    Problème résolu et compris.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-5.7] Problème [trigger before insert] sous condition & jointure
    Par verdiose dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/06/2018, 10h23
  2. Trigger Before Insert et Before Update
    Par NicoNours dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 14/08/2007, 10h20
  3. Trigger : Before insert
    Par guitou0 dans le forum Développement
    Réponses: 6
    Dernier message: 29/06/2007, 11h39
  4. Trigger Before Insert
    Par Fred_ET dans le forum Administration
    Réponses: 7
    Dernier message: 22/11/2006, 00h29
  5. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12

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