Bonjour,
J'apprends depuis hier a faire des procedures stockees.
J'ai écrit la procedure suivante:
Elle fonctionne.
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;
Par contre j'aimerais l'améliorer en utilisant returning pour recuperer l'id de l'insert qui a eu lieu.
et la je bloque. Je ne sais pas comment faire.
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;
J'ai l'erreur suivante
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...
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
Si quelqu'un pouvait me donner un petit coup de main.
MErci
Partager