17,089
社区成员
发帖
与我相关
我的任务
分享
-- 超过精度当然会报错: 解决办法就是把8位数提高。
-- ENTER_JE = 3 & ENTER_MONTH = 123456.77 3*123456.77 = 370370.31 ~= 370371 共8位数 = 8
SQL> DECLARE
2 N_MONEY NUMBER(8, 2);
3 N_JE NUMBER(8, 2);
4 I_MONTH INT;
5
6 BEGIN
7 N_JE := &ENTER_JE;
8 I_MONTH := &ENTER_MONTH;
9
10 N_MONEY := N_JE * I_MONTH;
11
12 DBMS_OUTPUT.PUT_LINE('N_MONEY:' || N_MONEY);
13 END;
14 /
N_MONEY:370371
PL/SQL procedure successfully completed
-- ENTER_JE = 3 & ENTER_MONTH = 811162.66 3*811162.66 = 2433487.98 共9位数 > 8
SQL> DECLARE
2 N_MONEY NUMBER(8, 2);
3 N_JE NUMBER(8, 2);
4 I_MONTH INT;
5
6 BEGIN
7 N_JE := &ENTER_JE;
8 I_MONTH := &ENTER_MONTH;
9
10 N_MONEY := N_JE * I_MONTH;
11
12 DBMS_OUTPUT.PUT_LINE('N_MONEY:' || N_MONEY);
13 END;
14 /
DECLARE
N_MONEY NUMBER(8, 2);
N_JE NUMBER(8, 2);
I_MONTH INT;
BEGIN
N_JE := 3;
I_MONTH := 811162.11;
N_MONEY := N_JE * I_MONTH;
DBMS_OUTPUT.PUT_LINE('N_MONEY:' || N_MONEY);
END;
ORA-06502: PL/SQL: numeric or value error: number precision too large
ORA-06512: at line 10
[Quote=引用楼主 longgedexin 的帖子:]