我做了一个非常简单的查询(总结一列):
select
SUM (txn.amt_val) AS monto
from siebel.s_loy_txn txn
查询结果是791412524.16但是当我做一个假脱机时,我得到的结果被截断了。
所以:791412524
完整查询是这样的 - >
SET serveroutput ON SIZE 1000000;
SET pages 0;
SET linesize 15000;
SET heading OFF;
SET verify OFF;
SET echo OFF;
SET feedback OFF;
SET term OFF;
SET trims ON;
Spool 'C:\Users\Report.txt' --spoolname from dual;
Select
SUM (txn.amt_val) AS monto
from siebel.s_loy_txn txn;
SPOOL off
答案 0 :(得分:0)
也许明确地将数字转换为足够长的char?
select cast(txn.amt_val as char(20)) as monto from siebel.s_loy_txn txn;
答案 1 :(得分:0)
SQL * Plus中的默认numwidth
为10.结合默认numformat
表示十进制值最多显示十位有效数字;在这种情况下,它会隐式舍入小数,而不是截断。如果您的结果是91412524.16,您会看到91412524.2。
这描述为in the documentation:
SQL * Plus通常显示的数字与精度所需的位数一样多,最多可达标准显示宽度,该宽度由SET命令的NUMWIDTH变量值(通常为10)决定。如果数字大于SET NUMWIDTH的值,则SQL * Plus会将数字向上或向下舍入到可能的最大字符数,或者如果数字太大则显示哈希值。
......虽然这并不是特别清楚。
你可以让numwidth
更大,在这种情况下至少12;或者设置numformat
以明确包含小数(可选择fm
来抑制前导空格和尾随零);或者使用带有类似面具的to_char()
;或者作为CZ朱建议你可以施放具有相同效果但不太明显的。
测试所有这些选项:
-- default numwidth and numformat
select 791412524.16 from dual;
set numwidth 11
select 791412524.16 from dual;
set numwidth 12
select 791412524.16 from dual;
set numwidth 10
set numformat fm999999999999999.99999
select 791412524.16 from dual;
set numformat ""
select to_char(791412524.16, 'fm999999999999999.99999') from dual;
select cast(791412524.16 as varchar2(20)) from dual;
获得:
791412524
791412524.2
791412524.16
791412524.16
791412524.16
791412524.16
这个问题是为SQL Developer标记的,但是作为你正在使用错误的页面大小,你似乎在使用SQL * Plus。同样的事情也适用于SQL Developer,除了它的默认numformat
不太友好,给你7.9E+08
。更改numwidth
没有帮助,但其他版本也在SQL Developer中获得了全部价值。