[20180927]ora-01426.txt

来源:这里教程网 时间:2026-03-03 12:02:23 作者:

[20180927]ora-01426.txt --//链接:http://www.itpub.net/thread-2105458-1-1.html 1.环境: SCOTT@test01p> @ ver1 PORT_STRING                    VERSION        BANNER                                                                               CON_ID ------------------------------ -------------- -------------------------------------------------------------------------------- ---------- IBMPC/WIN_NT64-9.1.0           12.1.0.1.0     Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0 set serveroutput on DECLARE   L_NUMBER number; BEGIN   L_NUMBER := 1024 * 1024 * 1024 * 1024;   DBMS_OUTPUT.PUT_LINE(L_NUMBER); END; / DECLARE * ERROR at line 1: ORA-01426: numeric overflow ORA-06512: at line 4 --//1024*1024 = 1048576 --//1048576*1048576 = 1099511627776 d:\blog>oerr ora 1426 01426, 00000, "numeric overflow" // *Cause: Evaluation of an value expression causes an overflow/underflow. // *Action: Reduce the operands. DECLARE   L_NUMBER number; BEGIN   L_NUMBER := 1024 * 1024 * 1024 * 1024.0;   DBMS_OUTPUT.PUT_LINE(L_NUMBER); END; / 1099511627776 PL/SQL procedure successfully completed. --//使用小数点,等于浮点运算,出现类型转换. --//写成如下,一样通过,也证明没有溢出: DECLARE   L_NUMBER number; BEGIN   L_NUMBER := 1024 * 1024 * 1024;   L_NUMBER :=L_NUMBER *1024 *1024*1024;   DBMS_OUTPUT.PUT_LINE(L_NUMBER); END; / 1152921504606846976 PL/SQL procedure successfully completed. SCOTT@test01p> set serverout on SCOTT@test01p> DECLARE   2    L_NUMBER number;   3  BEGIN   4      L_NUMBER := 2147483647-1+1;   5      L_NUMBER := 2147483647+1-1;   6       DBMS_OUTPUT.PUT_LINE(L_NUMBER);   7  END;   8  / DECLARE * ERROR at line 1: ORA-01426: numeric overflow ORA-06512: at line 5 --//很明显oracle在一个算式里面达到2^31 就报错.改成如下也不会报错 DECLARE   L_NUMBER number; BEGIN    -- L_NUMBER := 2147483647-1+1;     L_NUMBER := 2147483647;     L_NUMBER := L_NUMBER+1-1;      DBMS_OUTPUT.PUT_LINE(L_NUMBER); END; / 2147483647 PL/SQL procedure successfully completed.

相关推荐