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 :

Erreur sur création d'une fonction


Sujet :

PostgreSQL

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Erreur sur création d'une fonction
    Bonjour à tous,

    J'ai une table qui contient des infos géographiques lati/longi, et une autre qui reflète les données par un objet PostGis.

    Je souhaite faire un trigger pour maintenir à jour la seconde table en fonction des changements de la première.

    D'après les exemples, il faut passer par une fonction. J'ai fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    CREATE FUNCTION emp_stamp () RETURNS TRIGGER AS '
        BEGIN
    	IF tg_op = ''DELETE'' THEN
    		DELETE FROM geo_nodes WHERE id = old.id;
    		RETURN old;
    	ELSE IF tg_op = ''INSERT'' THEN
    		INSERT INTO geo_nodes (id, point) VALUES(new.id, ST_MakePoint(new.longitude * 0.0000001, new.latitude * 0.0000001));
    	ELSE IF tg_op = ''UPDATE'' THEN
    		UPDATE geo_nodes SET point = ST_MakePoint(new.longitude * 0.0000001, new.latitude * 0.0000001) WHERE id = new.id;
    	END IF;
    	RETURN new;
        END;
    'LANGUAGE 'plpgsql';
    Mais j'obtiens un message d'erreur :
    ERREUR: erreur de syntaxe sur ou près de « ; »
    LINE 12: END;
    Pourquoi ça ne fonctionne pas ?

    Pouvez-vous m'aider ?

    Merci, A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    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
    CREATE FUNCTION emp_stamp () RETURNS TRIGGER AS 
       $BODY$
        BEGIN
    	IF tg_op = 'DELETE' THEN
    		DELETE FROM geo_nodes WHERE id = old.id;
    		RETURN old;
    	ELSE IF tg_op = 'INSERT' THEN
    		INSERT INTO geo_nodes (id, point) VALUES(new.id, ST_MakePoint(new.longitude * 0.0000001, new.latitude * 0.0000001));
    	ELSE IF tg_op = 'UPDATE' THEN
    		UPDATE geo_nodes SET point = ST_MakePoint(new.longitude * 0.0000001, new.latitude * 0.0000001) WHERE id = new.id;
    	END IF;
    	RETURN new;
        END;
        $BODY$
    LANGUAGE 'plpgsql';
    Essayez comme ca en enlevant les quotes.

  3. #3
    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
    Le problème est qu'il y a 3 IF et un seul END IF.
    Il y a 2 corrections possibles, soit mettre 3 END IF à la suite, soit garder un seul END IF à la fin mais utiliser ELSIF (en un seul mot) au lieu de ELSE IF (en deux mots).

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 67
    Points : 67
    Points
    67
    Par défaut
    excusez ma mauvaise solution =)

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Oui c'était ça, "ELSIF" et pas "ELSE IF". Merci beaucoup
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

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

Discussions similaires

  1. Erreur sur création d'une clé primaire
    Par Just-Soft dans le forum SQL
    Réponses: 6
    Dernier message: 09/08/2011, 10h32
  2. Erreur sur création d'une vue
    Par CinePhil dans le forum Débuter
    Réponses: 2
    Dernier message: 18/10/2009, 00h06
  3. ERREUR incompréhensible lors de la création d'une fonction
    Par BATAK dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/10/2009, 22h36
  4. [VBA-E]erreur sur création d'une barre de menu
    Par roseau dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/03/2007, 11h17
  5. Réponses: 6
    Dernier message: 06/03/2007, 00h06

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