2

在 Oracle 11g 数据库上运行以下代码时,我得到 ORA-01426: numeric overflow:

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 可以接受的最大精度是多少?

4

1 回答 1

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;

如果您无法听懂我想说的话,或者您不能听懂,请回复

对答案很满意。

于 2013-12-03T06:42:56.947 回答