Procedure stocke et insert returning
Bonjour,
J'apprends depuis hier a faire des procedures stockees.
J'ai écrit la procedure suivante:
Code:
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:
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:
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