Fonction avec plusieurs paramètres OUT
Bonjour,
J'ai
1. une table :
Code:
1 2 3 4 5
|
CREATE TABLE pk_test.variable (
champ_v VARCHAR(100),
champ_n INTEGER
) |
2. une fontion
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| CREATE OR REPLACE FUNCTION pk_test.f_08 (
pv_in pk_test.variable,
pn_in integer,
out ps_out varchar,
out pn_out integer,
out pv_out pk_test.variable
)
RETURNS record AS
$body$
DECLARE
BEGIN
raise notice 'dans la fonction:début:%:%:%',pv_in.champ_v,pv_in.champ_n,pn_in;
pv_out := pv_in;
pv_out.champ_n := 8;
pv_out.champ_v := 'f_08';
ps_out := 'paramètre out';
pn_out := pn_in * 8;
raise notice 'dans la fonction:fin:%:%,%,%',pv_out.champ_v,pv_out.champ_n,ps_out,pn_out;
return;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100; |
3. une autre fonction qui appelle la précédent :
Code:
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 pk_test.f_test (
)
RETURNS void AS
$body$
DECLARE
vv_var pk_test.variable%rowtype;
vv_var_out pk_test.variable%rowtype;
vr_retour RECORD;
BEGIN
raise notice 'F_08-----------------------------------';
vv_var.champ_v := 'champ v';
vv_var.champ_n := 0;
raise notice 'avant appel fonction:%:%', vv_var.champ_v, vv_var.champ_n;
select * into vr_retour from pk_test.f_08(vv_var, 8);
raise notice 'retour:%', vr_retour;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100; |
lorsque j'exécute cette fonction, je reçois ces résultats :
NOTICE: F_08-----------------------------------
NOTICE: avant appel fonction:champ v:0
NOTICE: dans la fonction:début:champ v:0:8
NOTICE: dans la fonction:fin:f_08:8,paramètre out,64
NOTICE: retour: ("paramètre out",64,"(f_08,8)")
c'est bien correct, mais comment faire pour "décomposer" ces données (en format RECORD) dans une variable varchar, une variable integer et une variable rowtype ?