这两天做了下测试,发现DM8一个特性跟PostgreSQL数据库很类似:在做除法时,默认会自动舍弃小数部分,同种情况下Oracle数据库默认会保留小数。
测试情况如下:
SQL> select 10/3 result from dual;
行号 RESULT
---------- -----------
1 3
已用时间: 6.454(毫秒). 执行号:700.
user=> select 10/3 result from dual;
result
--------
3
(1 行记录)
--转换数据类型后就可以输出小数部分
user=> select 10::numeric/3::numeric result from dual;
result
--------------------
3.3333333333333333
(1 行记录)
SQL> select 10/3 result from dual;
RESULT
----------
3.33333333
SQL> alter system set 'COMPATIBLE_MODE' =2 spfile;
DMSQL 过程已成功完成
已用时间: 6.741(毫秒). 执行号:702.
SQL> host /dm8/bin/DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
SQL> select name,type,value,sys_value,file_value from v$parameter t where name like 'COMPATIBLE_MODE';
服务器[LOCALHOST:5236]:处于普通打开状态
已连接
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 COMPATIBLE_MODE IN FILE 2 2 2
已用时间: 5.423(毫秒). 执行号:500.
SQL> select 10/3 result from dual;
行号 RESULT
---------- -----------
1 3
已用时间: 1.314(毫秒). 执行号:501.
发现还是没有小数部分。
SQL> select name,type,value,sys_value,file_value from v$parameter t where name like 'CALC_AS_DECIMAL';
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 CALC_AS_DECIMAL IN FILE 0 0 0
已用时间: 4.945(毫秒). 执行号:503.
SQL> alter system set 'CALC_AS_DECIMAL' =1 spfile;
DMSQL 过程已成功完成
已用时间: 6.666(毫秒). 执行号:504.
SQL> host /dm8/bin/DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
SQL> select name,type,value,sys_value,file_value from v$parameter t where name like 'CALC_AS_DECIMAL';
服务器[LOCALHOST:5236]:处于普通打开状态
已连接
行号 NAME TYPE VALUE SYS_VALUE FILE_VALUE
---------- --------------- ------- ----- --------- ----------
1 CALC_AS_DECIMAL IN FILE 1 1 1
已用时间: 4.813(毫秒). 执行号:500.
SQL> select 10/3 result from dual;
行号 RESULT
---------- ---------------------------------------
1 3.3333333333333333333333333333333333333
已用时间: 1.040(毫秒). 执行号:501.
发现已经可以显示小数部分了。
文章
阅读量
获赞