如何通过INT id从PostgreSQL函数返回值数组

时间:2016-02-12 23:42:08

标签: arrays postgresql function

我正在尝试创建一个简单的PostgreSQL函数,其中通过使用INT参数我喜欢将数组返回。下面的例子不起作用,但应该知道我试图从函数中获取的内容。感谢。

b

contacts_primarycountry和contacts_othercountry的数据类型是整数。 contacts_id是唯一且整数。

2 个答案:

答案 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}