集合的数字溢出异常.存在(n) 方法



我得到ORA-01426:在Oracle 11g数据库上运行以下代码时的数字溢出:

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 文档没有多大帮助,因为它没有提到参数的数据类型。

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

在您的代码中,您使用了记录数据类型,其中您提到了一个变量

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;

如果您无法理解我想说的话或您没有,请回复

对答案感到满意。

最新更新