gpt4 book ai didi

arrays - 从 postgresql 函数返回 BIGINT[]

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

我知道之前有人问过一些类似的问题,但没有一个答案对我有用!我使用 POSTGRESQL 8.4 并试图从函数返回一个 BIGINT 值数组。我的查询看起来像:

CREATE OR REPLACE FUNCTION public.bigint_func(
in "in_arg" BIGINT)
RETURNS SETOF BIGINT
AS
$body$
DECLARE bigint_list BIGINT [ ];
BEGIN
SELECT
id
FROM
table1
INTO bigint_list;
RETURN NEXT;
END
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER;

我想按如下方式使用该功能:

SELECT * 
FROM
table1
JOIN (SELECT ids
FROM bigint_func(123))t2 ON table1.id = t2.id

但我收到以下错误:

ERROR:  query has no destination for result data
HINT: If you want to discard the results of a SELECT, use PERFORM instead.

函数的代码应该怎么写?

最佳答案

看起来您可能正在混合两种方法来完成您想要完成的事情。一次循环并返回一个值,或者将所有内容作为查询返回。

我认为这些都可以。

循环并一次返回一行。

CREATE OR REPLACE FUNCTION bigint_func(
in "in_arg" BIGINT)
RETURNS SETOF BIGINT
AS
$body$
DECLARE
bigint_list BIGINT [ ];
my_id bigint;
BEGIN
for my_id in
SELECT
id
FROM
table1
loop
RETURN NEXT my_id;
END loop;
end;
$body$
LANGUAGE 'plpgsql'
VOLATILE

或者将整个查询作为数据集返回。

CREATE OR REPLACE FUNCTION bigint_func(
in "in_arg" BIGINT)
RETURNS SETOF BIGINT
AS
$body$
DECLARE
bigint_list BIGINT [ ];
BEGIN
return query
SELECT
id
FROM
table1;
end;
$body$
LANGUAGE 'plpgsql'
VOLATILE

-- 编辑--

要使查询正常工作,可以将返回类型更改为表:

CREATE OR REPLACE FUNCTION bigint_func(in "in_arg" BIGINT)
RETURNS table (id bigint)
AS
$body$
BEGIN
return query
SELECT
table1.id
FROM
table1;
end;
$body$
LANGUAGE 'plpgsql'
VOLATILE;

然后您可以随意命名该字段(在本例中为 id)

SELECT * 
FROM
table1
join bigint_func(123) t2
ON table1.id = t2.id

关于arrays - 从 postgresql 函数返回 BIGINT[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54190559/

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