2012-10-09 11 views
1

Imaginez que nous avons une simple tablePostgres: Comment remplir un tableau après insertion

create table a (id serial, data text); 

et la fonction suivante:

create or replace function f() 
returns SETOF int As 
$BODY$ 
DECLARE 
    l_arr int[]; 
BEGIN 

    insert into a(data) 
    values ('a') 
    returning array_agg(data) into l_arr; --THIS DOES NOT WORK 

    RETURN l_arr; 

END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER 
    COST 100 

Comment on peut recueillir des valeurs insérées dans un tableau dans le même SQL déclaration?

Répondre

1

Il semble qu'il est possible d'utiliser RETURN QUERY sans tableau intermédiaire:

create or replace function f() 
returns SETOF int As 
$BODY$ 
BEGIN 
    RETURN QUERY 
    insert into a(data) 
    values ('a') 
    returning id; 
END; 
$BODY$ 
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER 
    COST 100 
+0

Cela renverra un ensemble, pas un tableau, donc ce n'est pas une bonne réponse à votre question :) – dezso

+0

@dezso c'est la réponse parce que la fonction dans la question vise à retourner ensemble;) – Tim