sql - 选择超过 16 位数字会导致值错误

标签 sql oracle plsql

如果我在 plsql 或 sql 中选择超过 16 位数字,并且我得到错误的值,我现在就会遇到这种情况:

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

这是什么原因呢?以及如何在我的程序中解决这个问题?因为我连接了超过 16 位数字并将它们插入到表格中。

以下来自 sqlplus

enter image description here

最佳答案

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

关于sql - 选择超过 16 位数字会导致值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46466611/

相关文章:

Oracle 在后面的 block 中使用第一个 block 的异常处理程序

sql - 提高更新大表内容的查询性能的最佳方法

具有多个 WHERE(关系)条件的 SQL UPDATE

java - 在 Java 中设置值失败

mysql - 我有一个Sum(),其中a.name = b.name,我想选择最高的Sum() : How?的名称

c# - SQL INSERT 奇怪地跳过第一条记录

sql - PL/SQL 将一个字符串按 "+ "拆分并将其中的数字相加?

sql - 如何汇总SQL表以有条件地返回值

oracle - Oracle中执行立即出错

oracle - pl/sql 程序中的错误计数 (*)