gpt4 book ai didi

oracle - 对于较小的数字出现数字溢出错误,但对于较大的数字则成功

转载 作者:行者123 更新时间:2023-12-02 07:17:15 26 4
gpt4 key购买 nike

以下是我的测试函数:

create or replace FUNCTION test
RETURN NUMBER
AS
v_count number(15);
v_msisdn number(15);
BEGIN
v_msisdn:= 225952 * 10000;
-- v_msisdn:=50510060853 * 10000;

return v_msisdn;
END;

当我执行函数时

select test() from dual;

我收到错误

1426. 00000 -  "numeric overflow"
*Cause: Evaluation of an value expression causes an overflow/underflow.

但是,如果我更新

v_msisdn:=50510060853 * 10000;

我没有收到错误。

有人可以解释一下这种行为吗,因为第二个查询的数字更大?

最佳答案

您可以通过将整数文字之一强制转换为 integer 来解决此问题或number :

v_msisdn:= cast(225952 as integer) * 10000;

小整数文字的处理方式类似于 pls_integer 出于性能原因。不幸的是,这种类型会引发溢出异常:

A calculation with two PLS_INTEGER values that overflows the PLS_INTEGER range raises an overflow exception, even if you assign the result to a NUMBER data type For calculations outside the PLS_INTEGER range, use INTEGER, a predefined subtype of the NUMBER data type.

在第二个示例中,其中一个值 (50510060853) 不适合 pls_integer 的范围因此,被解释为 integer .

这是 AskTom 上的类似问题:Datatype Number results in Numeric overflow although value is small enough

关于oracle - 对于较小的数字出现数字溢出错误,但对于较大的数字则成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52187193/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com