如何从POSTGRES中的SELECT查询中排列值

时间:2018-09-25 20:20:53

标签: postgresql postgresql-9.6

我试图通过从表中提取3个值(所有SMALLINT值)并将它们转换为数组,从而在postgres调用中构造一个数组,以便可以在其余的调用中使用它们,例如code_list[0]

当前,我只创建了函数的这一部分,以便可以确保在继续进行之前正确地构造它。但是,我收到此错误error: subquery must return only one column,这使我觉得它假定我正在尝试返回TABLE。据我所知,我无法将一个表保存为一个值,因此我正在尝试创建一个数组。

我可以正确创建阵列吗?如果那是更好的策略,是否有办法将其转换为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;

1 个答案:

答案 0 :(得分:2)

使用数组构造函数:

DECLARE res integer[];
BEGIN
   SELECT ARRAY[c.big, c.mid, c.small] INTO res
   FROM ...
   RETURN res;
END;