我有一个功能,通过错误的计算由用户定义的SQL函数
CREATE OR REPLACE FUNCTION public.div(dividend INTEGER, divisor INTEGER)
RETURNS INTEGER
LANGUAGE 'sql'
IMMUTABLE
LEAKPROOF
STRICT
SECURITY DEFINER
PARALLEL SAFE
AS $BODY$
SELECT ($1 + $2/2)/$2;
$BODY$;
应该算一个商业四舍五入的结果确定。大多数情况下,它完成这项工作。我不知道为什么,但select div(5, 3)
给了我正确的答案,而当一个参数通过聚合来计算时,例如select div(5, 3)
。 select div(sum(val), 3) from (select 1 as val UNION SELECT 4) list
足以触发这一点。 我该如何修复div
?我不想投入每一个输入。
顺便说一下,使用SELECT (cast($1 as integer) + cast($2 as integer)/2)/cast($2 as integer);
作为div
的定义没有帮助。
太糟糕了,我没有想到这一点。谢谢。 – Bolpat