gpt4 book ai didi

sql - Postgres 数组作为 where 子句的函数输入

转载 作者:行者123 更新时间:2023-11-29 14:12:29 24 4
gpt4 key购买 nike

我有一个表,其中 VARCHAR 作为 PRIMARY_KEY,所以我的 ID 是随机生成的,看起来像 WUoN5VemTMQvOQidTi。我只想编写一个函数,它期望一个数组作为输入并返回数组中包含的所有元素。我认为以下半代码会更好地展示它:

CREATE OR REPLACE FUNCTION public."getInfo" (
"myIDs" varchar []
)
RETURNS varchar AS
$body$
BEGIN

SELECT * FROM "myTable" WHERE "id" IN($1) ORDER BY "idDate" DESC;
-- RETURN etc....

END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;

但问题是数组可以包含 50 个或更多条目(也可以是 100 个),所以我需要尽快完成此操作。下一个问题是,上面的代码不起作用。我经常使用 IN 关键字找到多个值的解决方案,但是有什么方法可以组合数组和 IN 子句吗?

是否有机会使用函数实现这一点?

最佳答案

对于 long 数组,它可以取消嵌套并连接到结果集:

CREATE OR REPLACE FUNCTION get_info(_ids varchar[])
RETURNS SETOF tbl AS
$BODY$
SELECT t.*
FROM unnest(_ids) id
JOIN tbl t USING (id)
ORDER BY id_date DESC;
$BODY$
LANGUAGE sql STABLE;

这可以是 plpgsql 函数,但也可以是 SQL 函数。

@Clodoaldo 已经就 STABLE 和返回类型给出了一些建议。我的演示返回整行。

不要只相信我的话。使用 EXPLAIN ANALYZE 运行测试,最好报告您的发现。 :)

关于sql - Postgres 数组作为 where 子句的函数输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9813715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com