我在 Postgres 9.6 中有一个接受 int[]
参数的函数。我想让该函数也接受单个 int (如有必要,并将其转换为单个元素数组)。
CREATE OR REPLACE FUNCTION get_subordinates(inp_persona_ids integer[])
-- Get all subordnates of the people passed in as array
-- TODO allow a single persona ID (int) to be passed in as inp_persona_ids
RETURNS TABLE (persona_id int) AS
$$
BEGIN
RETURN QUERY(
WITH RECURSIVE children AS (
-- passed in persona_id
SELECT
id AS persona_id,
manager_id
FROM
personas
WHERE
id = ANY(inp_persona_ids)
UNION
-- and all subordinates
SELECT
p.id AS persona_id,
p.manager_id
FROM
personas p
JOIN children c ON p.manager_id = c.persona_id
)
SELECT
children.persona_id
FROM
children
LEFT JOIN
personas on children.persona_id = personas.id
WHERE personas.disabled IS NOT TRUE
);
END;
$$ LANGUAGE plpgsql
如何更改函数定义并添加一些条件逻辑来测试 int
并在必要时更改为 ARRAY[int]
?
最佳答案
不可能在单个函数中处理这个问题,但您可以使用整数
参数重载该函数,并将其作为数组传递给现有函数:
CREATE OR REPLACE FUNCTION get_subordinates(inp_persona_id integer)
RETURNS TABLE (persona_id int) AS
$$
BEGIN
RETURN QUERY SELECT * FROM get_subordinates(ARRAY[inp_persona_id]);
END;
$$ LANGUAGE plpgsql;
也许您可能还想检查参数是否为 NULL
,这取决于您。
关于arrays - PostgreSQL 函数如何接受同一函数的整数或整数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58054316/