Oracle collection.EXISTS(n)方法出现数字溢出异常

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

在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
  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_类型索引表;