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 :

Fonction EXECUTE 'INSERT.. not commit


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    INGENIEUR DE RECHERCHE
    Inscrit en
    Février 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : INGENIEUR DE RECHERCHE

    Informations forums :
    Inscription : Février 2003
    Messages : 74
    Points : 87
    Points
    87
    Par défaut Fonction EXECUTE 'INSERT.. not commit
    Bonjour,

    Je fais une fonction avec un EXECUTE 'INSERT....'

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    CREATE OR REPLACE FUNCTION copy_microparcelle_row(INTEGER,TEXT) RETURNS INTEGER AS $$
     
    DECLARE
      var1 ALIAS FOR $1;
      var2 ALIAS FOR $2;
      v_query_part text;
      col_name varchar;
      newid int4;
     
    BEGIN
    	--Recherche de la colonne clé primaire
    	SELECT INTO col_name at.attname 
    	FROM
    	pg_constraint co
    	JOIN pg_class cl
    	ON cl.oid = co.conrelid AND co.contype = 'p'
    	JOIN pg_namespace ns
    	ON ns.oid = co.connamespace
    	JOIN pg_attribute at
    	ON at.attrelid = co.conrelid AND at.attnum = ANY( co.conkey )
    	WHERE cl.relname='microparcelle';
    	--Récupération de toutes les colonnes sauf la clé primaire
    	SELECT array_to_string((select array_agg(quote_ident( column_name )) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'public' AND TABLE_NAME = 'microparcelle' AND COLUMN_NAME <> col_name AND COLUMN_NAME <> 'geom'),',') INTO v_query_part;
    	RAISE LOG 'INSERT INTO microparcelle (%,geom) SELECT %,ST_GeomFromWKB(decode(''%'',''hex''),27572) FROM microparcelle WHERE microparcelle_id=% RETURNING microparcelle_id',v_query_part,v_query_part,var2,var1;
    	EXECUTE  'INSERT INTO microparcelle (' || v_query_part ||',geom) SELECT '|| v_query_part || ',ST_GeomFromWKB(decode(''' || var2 ||''',''hex''),27572) FROM microparcelle WHERE microparcelle_id=' || var1 || ' RETURNING microparcelle_id' INTO newid;
     
      RETURN newid;
     
    END;
     
    $$ LANGUAGE plpgsql;
    La fonction est bien traitée, mais l'insert ne se fait pas.
    J'appel cette fonction à partir d'un code python avec psycopg2

    J'ai testé la requête INSERT indépendamment (log). Elle réalise bien l'insertion.

    Je peux faire autrement, mais c'est très frustrant de ne pas trouver.
    Une idée?

    Merci d'avance.
    Spiale

  2. #2
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Essaye d'exécuter la fonction depuis pgadmin ou psql. S'il n'y pas d'erreur c'est que le SELECT ne donne rien.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

  3. #3
    Membre régulier
    Profil pro
    INGENIEUR DE RECHERCHE
    Inscrit en
    Février 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : INGENIEUR DE RECHERCHE

    Informations forums :
    Inscription : Février 2003
    Messages : 74
    Points : 87
    Points
    87
    Par défaut
    Oui, j'ai bien testé la fonction à partir de pgadmin. Tout se passe bien.
    Merci pour l'idée.
    Spiale

  4. #4
    Membre régulier
    Profil pro
    INGENIEUR DE RECHERCHE
    Inscrit en
    Février 2003
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : INGENIEUR DE RECHERCHE

    Informations forums :
    Inscription : Février 2003
    Messages : 74
    Points : 87
    Points
    87
    Par défaut
    En fait ca venait du code python et plus particulièrement de la librairie psycopg2.
    L'appel d'une procédure n'utilise pas la même fonction que celle utilisée pour l'exécution d'une requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    callproc(procname[, parameters])
    et ne pas oublier de faire un commit (psycopg2) derrière.
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            cur = p_conn.cursor()
            cutter=str( QByteArray( str(p_newGeom.asWkb()) ).toHex() )
            cur.callproc('copy_microparcelle_row',[int(p_mid),cutter,int(p_date_id),int(p_p_id)])#Appal de la fonction postgres
            p_conn.commit()
            row=cur.fetchone()#récupération du résultat de la procédure
            cur.close()
            return row[0]
    Merci à ceux qui m'ont lu.
    Spiale

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

Discussions similaires

  1. Différences execute immediate et commit
    Par pegase06 dans le forum SQL
    Réponses: 11
    Dernier message: 12/02/2007, 14h57
  2. [Executable] insertion d'image?
    Par thenightmare1985 dans le forum Langage
    Réponses: 3
    Dernier message: 04/12/2006, 01h12
  3. [SQL] fonction d'insertion sql
    Par wdionysos dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 03/04/2006, 16h32
  4. COMMIT or not COMMIT ?
    Par PaulBilou dans le forum Oracle
    Réponses: 3
    Dernier message: 17/09/2005, 08h56
  5. Réponses: 4
    Dernier message: 19/04/2004, 13h41

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