2016-05-13 55 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; 
相关问题