1
|
-- Function: "VegBank".plantconcept_ancestors(integer)
|
2
|
|
3
|
-- DROP FUNCTION "VegBank".plantconcept_ancestors(integer);
|
4
|
|
5
|
CREATE OR REPLACE FUNCTION "VegBank".plantconcept_ancestors(IN plantconcept_id_ integer, OUT plantconcept_id integer, OUT plantlevel character varying)
|
6
|
RETURNS SETOF record AS
|
7
|
$BODY$
|
8
|
DECLARE
|
9
|
plantparent_id "VegBank".plantstatus.plantparent_id%TYPE;
|
10
|
BEGIN
|
11
|
-- Get plantparent_id. Remove plantconcept_id if no match or no plantstatus.
|
12
|
SELECT
|
13
|
plantstatus.plantconcept_id
|
14
|
, plantstatus.plantlevel
|
15
|
, plantstatus.plantparent_id
|
16
|
INTO plantconcept_id, plantlevel, plantparent_id
|
17
|
FROM "VegBank".plantstatus
|
18
|
WHERE plantstatus.plantconcept_id = plantconcept_id_
|
19
|
;
|
20
|
-- Add this level to the list (output params' current values)
|
21
|
RETURN NEXT;
|
22
|
-- Recurse
|
23
|
IF plantparent_id IS NOT NULL THEN
|
24
|
RETURN QUERY (
|
25
|
SELECT * FROM "VegBank"."plantconcept_ancestors"(plantparent_id)
|
26
|
);
|
27
|
END IF;
|
28
|
END;
|
29
|
$BODY$
|
30
|
LANGUAGE plpgsql IMMUTABLE STRICT
|
31
|
COST 100
|
32
|
ROWS 10;
|