DECLARE
v_Number NUMBER;
BEGIN
v_Number := 10*1000000000;
END;
乘数 被乘数
10 1000000000 的时候出错
100 100000000 的时候出错
1000 10000000 的时候出错
10000 1000000 的时候出错
100000 100000 的时候出错
1000000 10000 的时候出错
10000000 1000的时候出错出ORA-01426错误。
请问有人遇到这种问题吗?
v_Number NUMBER;
BEGIN
v_Number := 10*1000000000;
END;
乘数 被乘数
10 1000000000 的时候出错
100 100000000 的时候出错
1000 10000000 的时候出错
10000 1000000 的时候出错
100000 100000 的时候出错
1000000 10000 的时候出错
10000000 1000的时候出错出ORA-01426错误。
请问有人遇到这种问题吗?
这样定义试试
v_Number NUMBER(12);
或是更大点
Connected to:
Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Production
With the Partitioning, OLAP and Data Mining optionsSQL> set serveroutput on
SQL> declare
2 v_number number(20);
3 begin
4 v_number:=10.1*1000000000;
5 dbms_output.put_line(v_number);
6 end;
7 /
10100000000PL/SQL procedure successfully completed.SQL> 4
4* v_number:=10.1*1000000000;
SQL> c/10.1/10
4* v_number:=10*1000000000;
SQL> /
declare
*
ERROR at line 1:
ORA-01426: numeric overflow
ORA-06512: at line 4
SQL> 4
4* v_number:=10*1000000000;
SQL> c/1000000000/10000000000
4* v_number:=10*10000000000;
SQL> /
100000000000PL/SQL procedure successfully completed.
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - ProductionSQL> declare
2 v_number number(20);
3 begin
4 v_number:=1000000000*10;
5 dbms_output.put_line(v_number);
6 end;
7 /PL/SQL 过程已成功完成。Connected to:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - ProductionSQL> declare
2 v_number number(20);
3 begin
4 v_number:=1000000000*10;
5 dbms_output.put_line(v_number);
6 end;
7 /PL/SQL procedure successfully completed.SQL> set serveroutput on
SQL> /
10000000000PL/SQL procedure successfully completed.
v_Number2 := 1000000000;
v_Number := v_Number1 * v_Number2; 也不出错。看来在直接运算的时候类型匹配Oracle内部策略不同啊。 请高手看看,有没有补丁可以解决这一问题?