在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可以接受的最大精度是多少?
答案 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;
如果您无法遵循我想说的或您不是
,请退回满意答案。