LINUX.ORG.RU

Firebird и Statement failed, SQLSTATE = 22003

 


0

1

Добрый день всем.

Есть вопрос про Firebird 2.5.9 и ошибку:

Statement failed, SQLSTATE = 22003 Integer overflow. The result of an integer operation caused the most significant bit of the result to carry.

Почему вот такой запрос генерирует эту ошибку?

execute block
as
declare variable a numeric(18,4);
declare variable b numeric(18,4);
declare variable c numeric(18,4);
begin
    a = 100;
    b = 1000;
    c = 10000;
    a = a * b * c;
end

Если строчку

a = a * b * c;
переписать как
a = a * b;
a = a * c;
то этой ошибки уже нет.

Почему генерируется ошибка в первом случае?

Выражение a * b * c имеет тип numeric(18, 12), в который не помещается результат умножения 100 * 1000 * 10000, у выражения a * c тип numeric(18, 8) в который результат помещается.

No ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.