, , ,

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');