2016-05-13 54 views
0

這裏是我的功能是如何的外觀:如何在PostgreSQL中創建一個函數,它接受的參數數組,並返回一個表

create or replace function datafabric.test(psi_codes text[]) 
returns table (asset character varying (255), parent_asset character varying (255)) 
as 
$$ 
select asset, parent_asset 
from americas.asset a 
left join americas.prod_int p on a.row_id = p.row_id 
where root_asset_id in (select root_asset_id from americas.asset where p.name = ANY($1)) 
$$ LANGUAGE 'SQL' VOLATILE; 

然而,問題是,我得到這個

ERROR: function datafabric.test() does not exist SQL state: 42883 DURING the CREATION OF THE FUNCTION.

請注意,此功能有效。但是,我想在pgadmin屏幕上輸出結果。我現在無法做到這一點。

請幫忙。我正在使用postgresql 8.3版本。

+0

什麼是'改變function'的用意何在?這是無效的語法。請不要將語言名稱放在單引號中 - 這是一個標識符。 –

+0

無意。我錯誤地在這裏添加了。刪除它。 – Vids

+0

你是對的,謝謝。我從語言中刪除單引號。它現在可以工作,但這裏是我現在得到的。錯誤:查詢沒有結果數據的目的地 SQL狀態:42601 – Vids

回答

1

PostgreSQL 8.3不支持函數的RETURNS TABLE。您還必須指定不帶引號的函數的語言。

您可以利用以下類似行爲:

create or replace function 
     datafabric.test(psi_codes text[], 
         OUT asset character varying (255), 
         OUT parent_asset character varying (255)) 
     RETURNS SETOF RECORD as $$ 
select asset, parent_asset 
from americas.asset a 
left join americas.prod_int p on a.row_id = p.row_id 
where root_asset_id in (select root_asset_id from americas.asset where p.name = ANY($1)) 
$$ LANGUAGE SQL VOLATILE; 
相關問題