如何在 postgresql 中创建一个接受参数数组和 returns a table 的函数
How to create a function in postgresql that accepts array of parameters and returns a table
我的函数如下所示:
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())
$$ LANGUAGE 'SQL' VOLATILE;
但是,问题是我得到了这个
ERROR: function datafabric.test() does not exist SQL state: 42883 DURING the CREATION OF THE FUNCTION.
请注意,此功能有效。但是,我想在 pgadmin 屏幕上输出结果。我现在做不到。
请帮忙。我使用的是 postgresql 8.3 版本。
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())
$$ LANGUAGE SQL VOLATILE;
我的函数如下所示:
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())
$$ LANGUAGE 'SQL' VOLATILE;
但是,问题是我得到了这个
ERROR: function datafabric.test() does not exist SQL state: 42883 DURING the CREATION OF THE FUNCTION.
请注意,此功能有效。但是,我想在 pgadmin 屏幕上输出结果。我现在做不到。
请帮忙。我使用的是 postgresql 8.3 版本。
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())
$$ LANGUAGE SQL VOLATILE;