oracle - 以下情况下 PLS_INTEGER 和 INTEGER 之间的区别

标签 oracle plsql casting oracle11g type-conversion

请看这两个场景:

案例 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/

相关文章:

C++ : Send an object through a named pipe

java - 如何调试 java.sql.SQLException : could not resolve the connect identifier

c# - C# 中的 Oracle,绑定(bind)变量和 ID IN (1, 2, 3) 之类的查询

sql - 从 Oracle DB 删除数据

oracle - PL/SQL的单元测试

sql - SQL命令意外结束错误,请提出建议?

oracle - Oracle中将字符拆分为多行

c - 为什么要投指针?

oracle - 使用索引表空间添加约束PK

c++ - 解析二进制文件。什么是现代方式?