arrays - PostgreSQL 函数如何接受同一函数的整数或整数数组?

标签 arrays postgresql types plpgsql postgresql-9.6

我在 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/

相关文章:

arrays - 无法快速加载类数组中的数组数据

sql - 在重复的列上分组

postgresql - 从另一个 PL/Python block 调用 postgres PL/Python 存储函数

c++ - 为什么 printf 将 8 位字符填充为 32 位字符?

javascript - 使用此代码在 JS 中查找字符串中最长的单词?

c - C中二维数组的名称

javascript - 创建一个 JS 服务器,用于归档一周前的数据

postgresql - 简单数据库插入上的 Squeryl NullPointerException?

scala - 案例类字段中的递归类型参数

haskell - 在 Haskell 中解构类型