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 :

problème d'insertion à partir d'une fonction


Sujet :

PostgreSQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut problème d'insertion à partir d'une fonction
    Bonjour tout le monde,

    J'ai une question toute bébête!! Mai ça m'arrangerait beaucoup si je trouve une réponse! En fait un truc bizarre m'es arrivé en manipulant des requêtes sur postgresql 8.4. Je voulais automatiser l'insertion répétitive dans une table de ma BD alors j'ai utilisé une fonction. Au premier test ça a marché puis je sais pas ce que j'ai fais mais ça n'a plus marché. J'ai essayé de localiser le prb alors j'ai simplifié la requête et la fonction et voilà.. Le code suivant ne donne pas d'erreur mais l'insertion ne s'effectue pas et la table waypoint reste vide..
    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 FUNCTION insertion() RETURNS VOID AS $$
    DECLARE
    	i INTEGER;
    BEGIN
        FOR i IN 1..10 LOOP
    	INSERT INTO waypoint(id, latitude, longitude, altitude) VALUES (i,0,0,0);
    	COMMIT;
        END LOOP;
    END;
    $$ LANGUAGE plpgsql;
    SELECT * FROM waypoint;
    alors que celui là marche bien et l'insertion s'effectue..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO waypoint(id, latitude, longitude, altitude) VALUES (1,0,0,0);
    et je ne voix pas ou ça plante puisqu'au au début ça marchait bien!!!

    De l'aide ne serait pas de refus

    PLEASE HELP


  2. #2
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Je suis loin d'être experte en postgre donc je peux dire une grosse connerie, mais ne faut-il pas appeler la fonction ?

    Cordialement,

    Arkhena
    A bove ante, ab asino retro, a stulto undique caveto

  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
    Il faudrait enlever le commit dans la fonction, on n'y a pas droit en postgresql.
    On a le droit de faire un BEGIN avant d'appeler la fonction, et un COMMIT après.

    Par ailleurs effectivement il faut appeler la fonction, il ne suffit pas de la déclarer.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Janvier 2009
    Messages : 33
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    pour l'appel de la fonction avec je ne le mettais pas car je pensais que cet appel ne fait que afficher la sortie de la fonction alors à la place je faisais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM waypoint;
    car la fonction fait des insertion dans la table waypoint. Apparement j'étais à coté de la plaque! Et pour le COMMIT vous aviez raison aussi. Voilà le code qui marche bien:
    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 FUNCTION insertion() RETURNS VOID AS $$
    DECLARE
    	i INTEGER;
    BEGIN
        FOR i IN 1..10 LOOP
    	INSERT INTO waypoint(id, latitude, longitude, altitude) VALUES (i,0,0,0);
        END LOOP;
    END;
    $$ LANGUAGE plpgsql;
    SELECT insertion();
    COMMIT;
    Merci bien

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

Discussions similaires

  1. [PopUP][iframe] problème maj popup à partir d'une iframe
    Par fanchic29 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/03/2006, 17h34
  2. Problème ouverture form à partir d'une var
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 29/11/2005, 12h21
  3. Problème lancement excel à partir d'une DLL
    Par irnbru dans le forum MFC
    Réponses: 8
    Dernier message: 03/11/2005, 12h00
  4. Réponses: 5
    Dernier message: 15/07/2005, 11h25
  5. Réponses: 4
    Dernier message: 08/06/2004, 09h01

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