简单的算术表达式不在PL / pgSQL 9.3.5中计算

时间:2016-03-16 03:07:41

标签: postgresql plpgsql parentheses integer-division

我正在编写一个用户定义的函数,并且在进行简单的算术时遇到了很多麻烦:

...
DECLARE
    alpha numeric;
BEGIN
    RAISE NOTICE 'alpha: %', alpha; --alpha is NULL here
    RAISE NOTICE 'period: %', period; --period is an integer function param, it's 10
    alpha := 2/(period + 1);
    RAISE NOTICE 'alpha: %', alpha; --alpha is zero (!) here
    ...
END;

但如果我分两步计算alpha,它就能正常工作:

...
DECLARE
    alpha numeric;
BEGIN
    RAISE NOTICE 'period: %', period; --period is 10
    alpha := period + 1; --alpha is 11 here
    alpha := 2/alpha; --alpha is 0.1818...
    ...
END;

这是怎么回事? alpha是否在第一个表达式中转换为整数并舍入为零?

1 个答案:

答案 0 :(得分:1)

我怀疑问题是Postgres做了整数除法。所以,只需添加一个小数点:

alpha := 2.0/(period + 1);