Feed 函数与 PostgreSQL 中另一个函数的结果
Feed function with result of another function in PostgreSQL
我有一个函数 select 一些有趣行的 ID:
CREATE OR REPLACE FUNCTION ChannelSelection(...)
RETURNS TABLE(
ChannelId INTEGER
) AS [...]
它需要一些参数用于过滤目的,return一个SETOF INTEGER
。
我想使用这个函数 ChannelSelection
的结果来喂另一个接受 INTEGER[]
作为输入的函数:
CREATE OR REPLACE FUNCTION DataP2AMean(
_channelid INTEGER[] = NULL
)
RETURNS TABLE(
ChannelId INTEGER,
...
) AS
$BODY$
SELECT
D2.ChannelId,
...
FROM
...
WHERE
D2.ChannelId = ANY(_channelid)
OR _channelid IS NULL
$BODY$ LANGUAGE SQL;
当我发出以下查询时:
SELECT *
FROM DataP2AMean(_channelid := ChannelSelection(_site := '{41WOL1,41N043}'))
我收到这个错误:
ERROR: Function datap2amean(integer) doesn't exist
State SQL :42883 (undefined_function)
我不明白,因为我可以单独使用这些功能。看起来它正在搜索另一个签名,因此 ChannelSelection
return 只是一个整数,但事实并非如此。
我错过了什么?
channelselection
returns 一个 table(=集合)的整数。所以可能有很多很多行只有一个整数列。 datap2amean 需要一个 单个 (数组)值,而不是一组整数值。
不幸的是使用例如
select array_agg(i) from channelselection('{41WOL1,41N043}') i
仍然无济于事,因为那也是 return 一个 集合 整数数组。我们 知道 它只会 return 一行 - 但是具有一个数组列的一行仍然不同于单个整数数组值。
因此您需要将结果转换为单个值,例如像这样:
(select array_agg(i) from channelselection('{41WOL1,41N043}') i)::int[]
这可以用作另一个函数的参数:
SELECT *
FROM datap2amean ( (select array_agg(i) from channelselection('{41WOL1,41N043}') i)::int[] )
我有一个函数 select 一些有趣行的 ID:
CREATE OR REPLACE FUNCTION ChannelSelection(...)
RETURNS TABLE(
ChannelId INTEGER
) AS [...]
它需要一些参数用于过滤目的,return一个SETOF INTEGER
。
我想使用这个函数 ChannelSelection
的结果来喂另一个接受 INTEGER[]
作为输入的函数:
CREATE OR REPLACE FUNCTION DataP2AMean(
_channelid INTEGER[] = NULL
)
RETURNS TABLE(
ChannelId INTEGER,
...
) AS
$BODY$
SELECT
D2.ChannelId,
...
FROM
...
WHERE
D2.ChannelId = ANY(_channelid)
OR _channelid IS NULL
$BODY$ LANGUAGE SQL;
当我发出以下查询时:
SELECT *
FROM DataP2AMean(_channelid := ChannelSelection(_site := '{41WOL1,41N043}'))
我收到这个错误:
ERROR: Function datap2amean(integer) doesn't exist
State SQL :42883 (undefined_function)
我不明白,因为我可以单独使用这些功能。看起来它正在搜索另一个签名,因此 ChannelSelection
return 只是一个整数,但事实并非如此。
我错过了什么?
channelselection
returns 一个 table(=集合)的整数。所以可能有很多很多行只有一个整数列。 datap2amean 需要一个 单个 (数组)值,而不是一组整数值。
不幸的是使用例如
select array_agg(i) from channelselection('{41WOL1,41N043}') i
仍然无济于事,因为那也是 return 一个 集合 整数数组。我们 知道 它只会 return 一行 - 但是具有一个数组列的一行仍然不同于单个整数数组值。
因此您需要将结果转换为单个值,例如像这样:
(select array_agg(i) from channelselection('{41WOL1,41N043}') i)::int[]
这可以用作另一个函数的参数:
SELECT *
FROM datap2amean ( (select array_agg(i) from channelselection('{41WOL1,41N043}') i)::int[] )