Oracle collection.EXISTS(n)方法出现数字溢出异常
在Oracle 11g数据库上运行以下代码时,我遇到ORA-01426:数值溢出:Oracle collection.EXISTS(n)方法出现数字溢出异常,oracle,collections,plsql,ora-01426,Oracle,Collections,Plsql,Ora 01426,在Oracle 11g数据库上运行以下代码时,我遇到ORA-01426:数值溢出: DECLARE TYPE my_type IS RECORD ( a NUMBER, b VARCHAR2(10) ); TYPE my_table IS TABLE OF my_type INDEX BY BINARY_INTEGER; my_var my_table; my_num1 NUMBER; my_num2 NUMBER; BEGIN
DECLARE
TYPE my_type
IS
RECORD
(
a NUMBER,
b VARCHAR2(10) );
TYPE my_table
IS
TABLE OF my_type INDEX BY BINARY_INTEGER;
my_var my_table;
my_num1 NUMBER;
my_num2 NUMBER;
BEGIN
my_num1 := 1;
my_num2 := 781301042106240;
IF NOT my_var.EXISTS(my_num1) THEN
dbms_output.put_line('my num1 works');
END IF;
IF NOT my_var.EXISTS(my_num2) THEN
dbms_output.put_line('my num2 works');
END IF;
END;
看来现有的方法无法处理这个大数字。但它不应该接受数字数据类型作为输入吗?
Oracle并没有提供太多帮助,因为它没有提到参数的数据类型
有人知道存在的最大精度可以接受吗?在代码中,您使用了记录数据类型,您在其中提到了一个带有 varchar2(10)现在在第三行(my_var my_table)中,您指的是一个记录表 但当您初始化了一个数字(my_num2:=781301042106240;)时,请键入精度 远远超出记录中的变量大小,因此出现错误。请尝试以下操作:
DECLARE
TYPE my_type
IS
RECORD
(
a NUMBER,
b VARCHAR2(10) );
TYPE my_table
IS
TABLE OF my_type INDEX BY BINARY_INTEGER;
my_var my_table;
my_num1 NUMBER;
my_num2 simple_integer :=1078130104;
BEGIN
my_num1 := 1;
IF NOT my_var.EXISTS(my_num1) THEN
dbms_output.put_line('my num1 works');
END IF;
IF NOT my_var.EXISTS(my_num2) THEN
dbms_output.put_line('my num2 works');
END IF;
END;
如果你不能理解我想说的话或者你没有,请回复
对答案感到满意 声明为二进制_整数的变量最多可分配2**31(2147483647)的值。感谢schurik,您是对的,这是精度索引问题。解决方法是使用VARCHAR2而不是二进制整数。。。TYPE my_table是由VARCHAR2(40)生成的my_类型索引表;