1
Я пишу определенный пользователь функцию и был много неприятностей делают простой арифметической:Простого арифметическое выражение не вычисляет в PL/PgSQL 9.3.5
...
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;
Но если рассчитать альфа в два шаги, он работает правильно:
...
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;
Что случилось с этим? Преобразуется ли альфа в целое число в первое выражение и округляется до нуля?
Это сделало, спасибо. Но я думаю, что это очень плохое поведение со стороны Pg. Я предполагаю, что это делает сумасшедшее чувство: 2/(целое число 11) = 0 в первой части, но 2/(числовые 11) = .1818 во второй части еще раз спасибо. – Bandersnatch
@Bandersnatch - Это поведение требуется ANSI/SQL - это не сообщество сообщества PostgreSQL. –