如何从 POSTGRES 中的 SELECT 查询中排列值
How to ARRAY values from a SELECT query in POSTGRES
我试图在我的 postgres 调用中构建一个数组,方法是从 table 中提取 3 个值(所有 SMALLINT)并将它们转换成一个数组,以便我可以在调用的其余部分中使用它们,例如所以 code_list[0]
.
目前,我只创建了函数的这一部分,以便我可以确保在继续之前正确地构建它。但是,我收到此错误 error: subquery must return only one column
,这让我觉得它假设我正在尝试 return 一个 TABLE。据我所知,我无法将 table 保存到一个值中,因此我正在尝试创建一个数组。
我是否正确创建了 ARRAY?如果这是更好的策略,有没有办法将其转换为 JSONB?
CREATE OR REPLACE FUNCTION "RetrieveCodeValues" (
"@code" VARCHAR(50)
)
RETURNS SMALLINT[] AS
$func$
BEGIN
SELECT ARRAY (
SELECT c."big", c."mid", c."small"
FROM "codes" AS c
WHERE "code" = "@code"
) AS code_list;
RETURN code_list;
END;
$func$ LANGUAGE PLPGSQL;
使用数组构造函数:
DECLARE res integer[];
BEGIN
SELECT ARRAY[c.big, c.mid, c.small] INTO res
FROM ...
RETURN res;
END;
我试图在我的 postgres 调用中构建一个数组,方法是从 table 中提取 3 个值(所有 SMALLINT)并将它们转换成一个数组,以便我可以在调用的其余部分中使用它们,例如所以 code_list[0]
.
目前,我只创建了函数的这一部分,以便我可以确保在继续之前正确地构建它。但是,我收到此错误 error: subquery must return only one column
,这让我觉得它假设我正在尝试 return 一个 TABLE。据我所知,我无法将 table 保存到一个值中,因此我正在尝试创建一个数组。
我是否正确创建了 ARRAY?如果这是更好的策略,有没有办法将其转换为 JSONB?
CREATE OR REPLACE FUNCTION "RetrieveCodeValues" (
"@code" VARCHAR(50)
)
RETURNS SMALLINT[] AS
$func$
BEGIN
SELECT ARRAY (
SELECT c."big", c."mid", c."small"
FROM "codes" AS c
WHERE "code" = "@code"
) AS code_list;
RETURN code_list;
END;
$func$ LANGUAGE PLPGSQL;
使用数组构造函数:
DECLARE res integer[];
BEGIN
SELECT ARRAY[c.big, c.mid, c.small] INTO res
FROM ...
RETURN res;
END;