我得到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;
如果您无法理解我想说的话或您没有,请回复
对答案感到满意。