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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| CREATE OR REPLACE FUNCTION dm.foo()
RETURNS text AS
$BODY$
DECLARE
dynamic_columns varchar;
BEGIN
select array_to_string(array_agg(distinct item_name order by item_name), ' text, ') into dynamic_columns from dm.clinicaldata;
return 'select * from crosstab (
''select Distinct subject_id, item_group_name, item_group_repeat, item_name, item_value from dm.clinicaldata order by 1'',
''select Distinct item_name from dm.clinicaldata order by item_name''
)
as newtable (
subject_id varchar, item_group_name varchar, item_group_repeat int, '|| dynamic_columns ||' text
)';
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION dm.foo()
OWNER TO postgres;
--------
CREATE OR REPLACE FUNCTION dm.bar()
RETURNS void AS
$BODY$
DECLARE
dyn_crosstab text;
BEGIN
DROP VIEW IF EXISTS barview;
select dm.foo() into dyn_crosstab;
execute 'create view barview as '||dyn_crosstab;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION dm.bar()
OWNER TO postgres;
------- execution du foction
select dm.bar();
------ pour affichage
select * from barview; |
Partager