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