2016-02-12 58 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 –