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