我正在尝试创建一个简单的PostgreSQL函数,其中通过使用INT参数我喜欢将数组返回。下面的例子不起作用,但应该知道我试图从函数中获取的内容。感谢。
b
contacts_primarycountry和contacts_othercountry的数据类型是整数。 contacts_id是唯一且整数。
答案 0 :(得分:5)
根据文档:
允许具有固定返回的多态参数 类型,但反过来不是。
因此,我认为您尝试返回anyarray
将无效。
你的字段看起来像文字,所以我想如果你把它改成这样的东西,那就可以了:
CREATE OR REPLACE FUNCTION contact_countries_array(INT)
RETURNS text[] AS $$
select array[contacts_primarycountry::text, contacts_othercountry::text]
FROM contacts WHERE contacts_id = $1
$$
LANGUAGE SQL;
这应该编译,可能工作,但我老实说不确定:
CREATE OR REPLACE FUNCTION contact_countries_array(anyelement)
RETURNS anyarray AS $$
select array[contacts_primarycountry::text, contacts_othercountry::text]
FROM contacts WHERE contacts_id = $1
$$
LANGUAGE SQL;
我认为数据类型必须完美匹配才能使其正常工作,除非你进行了转换。
答案 1 :(得分:1)
声明数组,循环播放,向数组添加项目,使用Postgres函数返回数组,
您可以声明INTEGER
而不是TEXT
数组,并避免强制转换(counter::TEXT)
以及返回类型TEXT[]
。 (添加了供参考。)
CREATE OR REPLACE FUNCTION "GetNumbers"(maxNo INTEGER) RETURNS TEXT[] AS $nums$
DECLARE
counter INTEGER := 0;
nums TEXT[] := ARRAY[]::TEXT[];
BEGIN
LOOP
EXIT WHEN counter = maxNo;
counter = counter + 1;
nums = array_append(nums, counter::TEXT);
END LOOP;
RETURN nums;
END ;
$nums$ LANGUAGE plpgsql;
SELECT "GetNumbers"(5); -- {1,2,3,4,5}