我现在有这个场景,如果我在plsql或sql中选择超过16位的数字,我会得到错误的值:
// the below from plsql
select 12345678901213 from dual
1.23456789101112E16
原因是什么?以及如何在我的程序中修复它?因为我连接了16位数字并将它们插入表格中。
以下来自sqlplus
答案 0 :(得分:4)
<强> SQLPLUS 强>
使用SET NUMWIDTH
,例如sqlplus
命令行:
SQL> SHOW NUMWIDTH
numwidth 10
SQL> select 12345678901213 from dual;
12345678901213
--------------
1,2346E+13
SQL> SET NUMWIDTH 20
SQL> select 12345678901213 from dual;
12345678901213
--------------------
12345678901213
<强> PL / SQL 强>
将值转换为正确的数据类型,例如(来自sqlplus
):
SQL> set serveroutput on
SQL> DECLARE
2 my_number NUMBER;
3 BEGIN
4 select 12345678901213 into my_number from dual;
5 dbms_output.put_line('Number:'|| my_number);
6 END;
7 /
Number:12345678901213