Bonjour,
J'ai
1. une table :
2. une fontion
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 )
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
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;
lorsque j'exécute cette fonction, je reçois ces résultats :
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;
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 ?
Partager