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错误。
请问有人遇到这种问题吗?

解决方案 »

  1.   

    应该是溢出了
    这样定义试试
    v_Number NUMBER(12);
    或是更大点
      

  2.   

    rabbitbug(兔八哥) 这样不行,偶试过了,最大38位,都不行。
      

  3.   

    我也是这样的。后面如多一个0也不出错。将10改为10.1也不出错。奇怪。
    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.
      

  4.   

    在8i和9i下正常。
    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.
      

  5.   

    v_Number1 := 100;
          v_Number2 := 1000000000;
          v_Number := v_Number1 * v_Number2;      也不出错。看来在直接运算的时候类型匹配Oracle内部策略不同啊。      请高手看看,有没有补丁可以解决这一问题?
      

  6.   

    http://forums.oracle.com/forums/thread.jspa?messageID=771448&#771448