Greenplum自定义递归函数

    xiaoxiao2021-12-11  18

    Greenplum自定义递归函数

    --删除自定义递归函数 DROP FUNCTION F_RECURSION_WAREHOUSE(ID TEXT[]); --创建自定义递归函数 CREATE OR REPLACE FUNCTION F_RECURSION_WAREHOUSE(ID TEXT[]) RETURNS SETOF TWB_M_CK AS $BODY$ DECLARE IDS TEXT[]; RD TWB_M_CK; BEGIN --判断参数ID是否为NULL IF(ID IS NULL) THEN RETURN;END IF; --ARRAY_AGG函数是用来连接到一个数组中的输入值,包括空。 SELECT ARRAY_AGG(PARENT_WAREHOUSE_ID) INTO IDS FROM TWB_M_CK WHERE WAREHOUSE_ID=ANY(ID::TEXT[]); --遍历查询结果集 FOR RD IN ( SELECT * FROM TWB_M_CK WHERE WAREHOUSE_ID = ANY(ID::TEXT[]) UNION SELECT * FROM F_RECURSION_WAREHOUSE(IDS) ) LOOP RETURN NEXT RD; END LOOP; END $BODY$ LANGUAGE 'PLPGSQL' VOLATILE; --执行函数 SELECT T.WAREHOUSE_ID,T.PARENT_WAREHOUSE_ID,T.WAREHOUSE_LEVEL FROM F_RECURSION_WAREHOUSE(CAST((SELECT ARRAY_AGG(WAREHOUSE_ID) FROM TWB_M_CK WHERE WAREHOUSE_TYPE = '2') AS TEXT[])) T WHERE T.WAREHOUSE_TYPE = '1' AND T.WAREHOUSE_LEVEL IS NOT NULL AND T.WAREHOUSE_LEVEL NOT IN('4','14'); /* * 备注: * 1、自定义递归函数无法获取递归开始节点或递归路径; * 2、递归结果集不支持关联查询; */

    转载请注明原文地址: https://ju.6miu.com/read-718328.html

    最新回复(0)