SQL Plus:如何防止数字的自动舍入

时间:2018-05-16 16:15:24

标签: oracle sqlplus

我需要使用SQL Plus将Oracle db值拉到csv,以比较小数点为10位的数值。

但是数字会自动舍入到小数点后8位。有没有什么办法可以禁用SQLPlus中的数字舍入。下面找到详细信息。

enter image description here

这是我的SQL Set命令。

SET UNDERLINE OFF
SET PAGESIZE 50000
SET NEWPAGE NONE
SET WRAP OFF
SET COLSEP ,     -- SEPARATE COLUMNS WITH A COMMA
SET FEEDBACK OFF
SET TRIMS ON
SET TRIMSPOOL ON
SET DEFINE ON
SET termout ON
SET verify ON
SET linesize 600

有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:4)

数字值没有任何内在格式,因此您的客户端正在决定如何显示它们。我不确定哪个客户端产生'DB'值,但SQL * Plus只是using its defaults

  

SQL * Plus通常显示的数字与精确度所需的位数一样多,最多可达NUMWIDTH命令的SET变量值(通常为10)所确定的标准显示宽度。如果数字大于SET NUMWIDTH的值,则SQL * Plus会将数字向上或向下舍入到可能的最大字符数,或者如果数字太大则显示哈希值。

所以你看到了:

with your_table (x, y) as (
            select -0.0224231886, -0.021470109  from dual
  union all select -0.037164512,  -0.0238026527 from dual
  union all select  0.021786217,   0.044550243  from dual
  union all select  0.0772262609,  0.0724136521 from dual
  union all select  0.968632046,   0.0866250777 from dual
)
select x, y from your_table;

        X,         Y
-.02242319,-.02147011
-.03716451,-.02380265
.021786217,.044550243
.077226261,.072413652
.968632046,.086625078

您可以使用`set numf[ormat]'更改会话的默认值,使用小数点前后足够数字的格式模型来表示您可能存储的任何数字,例如:

set numformat 990.99999999999

然后相同的查询得到

              X,              Y
  -0.0224231886,  -0.0214701090
  -0.0371645120,  -0.0238026527
   0.0217862170,   0.0445502430
   0.0772262609,   0.0724136521
   0.9686320460,   0.0866250777

或者您可以使用set numw[idth]隐式修改它:

set numf ""
set numwidth 20

                   X,                   Y
        -.0224231886,         -.021470109
         -.037164512,        -.0238026527
          .021786217,          .044550243
         .0772262609,         .0724136521
          .968632046,         .0866250777

为您提供所需的精度,但不显示前导零。如果这无关紧要,那么这种方法就更简单了。

答案 1 :(得分:2)

也许您寻求列格式化选项来强制执行列格式化

COLUMN column_name FORMAT 999999.0000000000