2016-02-12 106 views
2

我想创建一个简单的PostgreSQL函数,其中通过使用INT参数我喜欢获取数组。下面的例子不起作用,但应该说明我试图从函数中获得什么。谢谢。如何通过INT ID从PostgreSQL函数返回值数组

CREATE OR REPLACE FUNCTION contact_countries_array(INT) 
    RETURNS ANYARRAY AS ' 
    SELECT ARRAY[contacts_primarycountry, contacts_othercountry] FROM contacts WHERE contacts_id = $1' 
    LANGUAGE SQL; 

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

+0

请[edit](http://stackoverflow.com/posts/35374093/edit)您的问题添加一些样本数据和基于该数据的预期输出。我不知道你在做什么 –

+0

你是对的,我忘了描述希望的数据类型 –

回答

3

每文档:

它允许具有多态参数之间用固定回报 类型,但反之则不然。

因此,我认为您尝试返回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; 

我认为数据类型将不得不完美匹配这个工作,除非你做了铸造。

+0

对于第一个变体是,假设'contacts.contacts_id'被定义为'UNIQUE'。第二个中的多态类型可能没有根据,因为“contacts.contacts_id”的数据类型应该事先知道。 –

+0

谢谢你们。基于@Hambone,我已经尝试过这样的: 'CREATE OR REPLACE FUNCTION contact_countries_array(为anyelement) 退货anyarray的AS ' SELECT ARRAY [contacts_primarycountry :: INT,contacts_othercountry :: INT]从联系人WHERE contacts_id = $ 1' LANGUAGE SQL;' 现在它工作。作为联系人的两个可能国家/地区{55,81},我现在可以与具有{55,81} && {55,82,101,12},@Hambone的国家/地区列表进行比较,非常感谢,@a_horse_with_no_name, @erwin_brandstetter –