我正在使用PostgreSQL 8.4
并编写如下函数。我遇到了一个问题,如何将结果集转换为数组。我的意思是,假设我有一个查询只返回一列整数类型,例如
SELECT amount from daily_profit;
我一直在尝试编写以下内容:
CREATE OR REPLACE FUNCTION fill_daily_profit() RETURNS void AS $$
DECLARE
arr integer[] := cast ((SELECT amount from partner.daily_profit) as integer[]);
-- doesn't work, the following error was produced:
-- cannot cast type integer to integer[]
BEGIN
END $$
LANGUAGE plpgsql;
有什么想法吗?
我为此建议使用更简单,更快的ARRAY构造函数:
CREATE OR REPLACE FUNCTION fill_daily_profit()
RETURNS void AS
$func$
DECLARE
arr integer[] := ARRAY (SELECT amount FROM partner_daily_profit);
BEGIN
...
END
$func$ LANGUAGE plpgsql;
如果需要特定顺序的元素,请将 ORDER BY
子句添加到SELECT
。
但是,通常有一个基于集合的解决方案,可以先验地消除对此类数组的需求。
您需要将值聚合到一个数组中:
CREATE OR REPLACE FUNCTION fill_daily_profit() RETURNS void AS $$
DECLARE
arr integer[];
BEGIN
select array_agg(amount)
into arr
from partner_daily_profit;
END $$
LANGUAGE plpgsql;