如何在postgresql中创建一个接受参数数组并返回表的函数

时间:2016-05-13 20:05:24

标签: postgresql plpgsql postgresql-8.3

以下是我的功能外观:

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;

然而,问题是我得到了这个

  

错误:函数datafabric.test()不存在SQL状态:42883在创建功能期间。

请注意,此功能有效。但是,我想在pgadmin屏幕上输出结果。我现在无法做到这一点。

请帮忙。我正在使用postgresql 8.3版本。

1 个答案:

答案 0 :(得分: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;