我需要使用SQL Plus将Oracle db值拉到csv,以比较小数点为10位的数值。
但是数字会自动舍入到小数点后8位。有没有什么办法可以禁用SQLPlus中的数字舍入。下面找到详细信息。
这是我的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
有人可以帮我解决这个问题。
答案 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