请看这两个场景:
案例 1:
DECLARE
p1 PLS_INTEGER := 2147483647;
p2 INTEGER := 1;
n NUMBER;
BEGIN
n := p1 + p2;
END;
PL/SQL procedure successfully completed.
案例二
DECLARE
p1 PLS_INTEGER := 2147483647;
p2 PLS_INTEGER := 1;
n NUMBER;
BEGIN
n := p1 + p2;
END;
Error at line 1
ORA-01426: numeric overflow
ORA-06512: at line 6
为什么 case 2
失败,即使我试图添加相同的数据类型而 case 1
执行成功?
最佳答案
PLS_INTEGER and BINARY_INTEGER Data Types 的文档 只说:
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.
但它没有告诉您原因。我认为原因是 PLS_INTEGER 操作使用硬件算法,因此 Oracle 正确地在内部执行它,例如
n := CAST(p1 + p2 AS NUMBER);
关于oracle - 以下情况下 PLS_INTEGER 和 INTEGER 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377432/