Bonjour,

J'ai
1. une table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
CREATE TABLE pk_test.variable (
  champ_v VARCHAR(100),
  champ_n INTEGER
)
2. une fontion
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
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 : 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
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 ?