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 :

Procedure stocke et insert returning


Sujet :

PostgreSQL

  1. #1
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    Par défaut Procedure stocke et insert returning
    Bonjour,

    J'apprends depuis hier a faire des procedures stockees.

    J'ai écrit la procedure suivante:

    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
     
    CREATE OR REPLACE FUNCTION testretour() RETURNS character varying AS $$
    DECLARE
    	essa integer := 0;
    	test TEXT;
    	test2 text;
    	mretour character varying;
    	coonection CHARACTER VARYING := 'fofo22';
    BEGIN
    	PERFORM dblink_connect(coonection,'dbname=test1');
    	SELECT dblink_exec(coonection,'INSERT INTO tablea (idb) VALUES (''55'');') INTO test2;
    	SELECT dblink_open(coonection,'mcur', 'SELECT COUNT(ida) FROM tablea') INTO test;
    	SELECT * INTO essa FROM dblink_fetch(coonection,'mcur', 5) AS (nb INT);
     
    	PERFORM dblink_disconnect(coonection);
    	RETURN test2;
    END;
    $$ LANGUAGE plpgsql;
    Elle fonctionne.
    Par contre j'aimerais l'améliorer en utilisant returning pour recuperer l'id de l'insert qui a eu lieu.
    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
     
    CREATE OR REPLACE FUNCTION testretour() RETURNS character varying AS $$
    DECLARE
    	essa integer := 0;
    	test TEXT;
    	test2 text;
    	mretour character varying;
    	coonection CHARACTER VARYING := 'fofo22';
    BEGIN
    	PERFORM dblink_connect(coonection,'dbname=test1');
    	SELECT dblink_exec(coonection,'INSERT INTO tablea (idb) VALUES (''55'') RETURNING ida;') INTO test2;
    	SELECT dblink_open(coonection,'mcur', 'SELECT COUNT(ida) FROM tablea') INTO test;
    	SELECT * INTO essa FROM dblink_fetch(coonection,'mcur', 5) AS (nb INT);
     
    	PERFORM dblink_disconnect(coonection);
    	RETURN test2;
    END;
    $$ LANGUAGE plpgsql;
    et la je bloque. Je ne sais pas comment faire.
    J'ai l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ERROR:  statement returning results not allowed
    CONTEXT:  SQL statement "SELECT dblink_exec( $1 ,'INSERT INTO tablea (idb) VALUES (''55'') RETURNING ida;')"
    PL/pgSQL function "testretour" line 9 at SQL statement
     
    ********** Erreur **********
     
    ERROR: statement returning results not allowed
    État SQL :2F003
    Contexte : SQL statement "SELECT dblink_exec( $1 ,'INSERT INTO tablea (idb) VALUES (''55'') RETURNING ida;')"
    PL/pgSQL function "testretour" line 9 at SQL statement
    Je vois bien qu'il faut que je récupère d'une facon ou d'une autre ce que j'insère mais je n'y arrive pas. Apparemment l'utilisation de fetch comme pour le select ne fonctionne pas...

    Si quelqu'un pouvait me donner un petit coup de main.

    MErci

  2. #2
    Membre averti
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Points : 330
    Points
    330
    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
    16
    17
    18
    19
    20
    21
    22
    CREATE OR REPLACE  FUNCTION testretour() RETURNS character varying
        AS $$
    DECLARE
    	essa integer := 0;
    	test TEXT;
    	test2 text;
    	mretour character varying;
    	coonection CHARACTER VARYING := 'fofo32';
    BEGIN
    	PERFORM dblink_connect(coonection,'dbname=test1');
    	SELECT MAX(monid) INTO test2 FROM dblink(coonection,'INSERT INTO tablea (idb) VALUES (''55''),(''66'') RETURNING ida AS monid;') AS (monid int);
    	SELECT dblink_open(coonection,'mcur', 'SELECT COUNT(ida) FROM tablea') INTO test;
    	SELECT * INTO essa FROM dblink_fetch(coonection,'mcur', 5) AS (nb INT);
     
    	PERFORM dblink_disconnect(coonection);
    	RETURN test2;
    END;
    $$
        LANGUAGE plpgsql;
     
     
    ALTER FUNCTION public.testretour() OWNER TO postgres;

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

Discussions similaires

  1. Procedure stockée d'insertion qui ne fait rien
    Par javaboy dans le forum VB.NET
    Réponses: 5
    Dernier message: 29/04/2008, 14h47
  2. Génération auto de procedure stockée insertion
    Par PickEpique dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 30/11/2007, 11h14
  3. procedure stockée pour insertion dans plusieurs tables
    Par bigwal2007 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 22/11/2007, 22h58
  4. Probleme d'insertion et de tri avec Procedure Stockée
    Par freud dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/04/2007, 15h27
  5. procedures stockées:can't return a result set in the given..
    Par ronando dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 27/10/2005, 15h55

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