使用collection.EXISTS(n)方法的数字溢出异常

时间:2013-09-16 11:10:02

标签: 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
  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;

看来EXISTS方法无法处理大数。但它不应该接受NUMBER数据类型作为输入吗? Oracle documentation没有多大帮助,因为它没有提到参数的数据类型。

有谁知道EXISTS可以接受的最大精度是多少?

1 个答案:

答案 0 :(得分:0)

在您的代码中,您使用了记录数据类型,其中您已使用

提及变量

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;

如果您无法遵循我想说的或您不是

,请退回

满意答案。