选择超过16位数会导致错误的值

时间:2017-09-28 10:15:09

标签: sql oracle plsql

我现在有这个场景,如果我在plsql或sql中选择超过16位的数字,我会得到错误的值:

 // the below from plsql
select 12345678901213 from dual
1.23456789101112E16

原因是什么?以及如何在我的程序中修复它?因为我连接了16位数字并将它们插入表格中。

以下来自sqlplus

enter image description here

1 个答案:

答案 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