{{tag>PostgeSQL plpgsql INPN TAXREF}}====== Connaitre tous les taxons situés sous un nœud de l'arbre taxonomique ====== CREATE OR REPLACE FUNCTION inpn.taxons_fils(character varying) RETURNS SETOF character varying AS $BODY$ DECLARE var_cd_nom alias for $1; BEGIN RETURN QUERY WITH RECURSIVE genealogie as( SELECT cd_nom, cd_taxsup, lb_nom FROM inpn.taxref WHERE cd_nom=lower(var_cd_nom) UNION SELECT inpn.taxref.cd_nom, inpn.taxref.cd_taxsup, inpn.taxref.lb_nom FROM inpn.taxref JOIN genealogie ON inpn.taxref.cd_taxsup = genealogie.cd_nom ) SELECT cd_nom FROM genealogie; END; $BODY$ LANGUAGE plpgsql VOLATILE SECURITY DEFINER COST 100; ALTER FUNCTION inpn.taxons_fils(character varying) OWNER TO dba; Exemple : lister tous les odonates SELECT inpn.taxons_fils('185356');