我正在使用greenplum数据库。下面是我以前执行的函数定义。
CREATE OR REPLACE FUNCTION testfunc(IN id int,OUT rate double precision)
RETURNS双精度AS
$ BODY $
开始
从ref_test_V
中选择计数(*)为速率返回;
端;
$ BODY $
LANGUAGE plpgsql VOLATILE;
当我在选择列表中调用此函数时,它会让我低于错误
查询:从ref_test
中选择1,testfunc(id)错误: XX000:函数无法在段上执行,因为它访问关系" public.ref_test_v" (functions.c:155)(seg25 slice1 *****。com 1026 pid = 193132)(cdbdisp.c:1326)
TIA
答案 0 :(得分:0)
Greenplum不支持此功能。如果它得到支持,请考虑一下它会做什么。它将从一个段中获取一行,然后从它自己进行计数(*)。将检索下一行,它将再次执行计数(*)。
执行此操作的纯SQL方法是:
with x as (select count(*) as total_count from ref_test_V)
select 1, x.total_count from ref_test, x;
如果您不喜欢使用公用表表达式,则可以使用子查询来执行此操作。
select 1, x.total_count
from ref_test,
(select count(*) as total_count
from ref_test_V) as x;
答案 1 :(得分:0)
从下表中调用该函数。
select 1, (select testfunc(5)) from ref_test;