达梦数据库参数为默认参数。
CEIL(n):求大于或等于数值 n 的最小整数,n 必须是数值类型,返回类型与 n 的类型相同。
SQL> select ceil(11.1) from dual;
行号 CEIL(11.1)
---------- ----------
1 12
已用时间: 7.058(毫秒). 执行号:204.
Oracle数据库中:
SQL> select ceil(11.1) from dual;
CEIL(11.1)
----------
12
可以观察到,n为指定的一个数值的情况下,结果与Oracle中相同。
达梦数据库参数为默认参数。测试如下:
disql中执行结果如下:
SQL> select (SYSDATE - to_date('2020-10-26 20:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60 from dual;
行号 (SYSDATE-TO_DATE('2020-10-2620:39:05','YYYY-MM-DDhh24:mi:ss'))*24*60
---------- --------------------------------------------------------------------
1 2.896666666666667E+001
SQL> select ceil((SYSDATE - to_date('2020-10-26 20:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60) from dual;
行号 CEIL((SYSDATE-TO_DATE('2020-10-2620:39:05','YYYY-MM-DDhh24:mi:ss'))*24*60)
---------- --------------------------------------------------------------------------
1 3.100000000000000E+001
SQL> select to_char(ceil((SYSDATE - to_date('2020-10-26 10:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60)) from dual;
行号 TO_CHAR(CEIL((SYSDATE-TO_DATE('2020-10-2610:39:05','YYYY-MM-DDhh24:mi:ss'))*24*60))
---------- -----------------------------------------------------------------------------------
1 6.31E2
管理工具中执行结果如下:
结果可能不一样因为SYSDATE是变化的,但是可以观察到to_char(ceil(表达式))的结果是已科学记数法表示的。并且CEIL对表达式求值时返回的结果并不是整数
Oracle中:
sqlplus中执行:
SQL> select (SYSDATE - to_date('2020-10-26 20:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60 from dual;
(SYSDATE-TO_DATE('2020-10-2620:39:05','YYYY-MM-DDHH24:MI:SS'))*24*60
--------------------------------------------------------------------
36.4333333
SQL> select ceil((SYSDATE - to_date('2020-10-26 20:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60) from dual;
CEIL((SYSDATE-TO_DATE('2020-10-2620:39:05','YYYY-MM-DDHH24:MI:SS'))*24*60)
--------------------------------------------------------------------------
37
SQL> select to_char(ceil((SYSDATE - to_date('2020-10-26 10:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60)) from dual;
TO_CHAR(CEIL((SYSDATE-TO_DATE('2020-10-2
----------------------------------------
637
可以观察到在Oracle中结果为整数,且to_char(ceil(表达式))结果也为整数。
参考《达梦数据库整数除法等运算默认舍弃小数》,猜测可能和CALC_AS_DECIMAL参数的取值有关。该参数为静态参数,取值如下:
0:默认值,表示整数类型的除法、整数与字符或BINARY串的所有四则运算,结果都处理成整数;
1:表示整数类型的除法全部转换为DEC(0,0)处理;
2:表示将整数与字符或BINARY串的所有四则运算都转换为 DEC(0,0)处理
注:该参数只有在USE_PLN_POOL为0或1时有效。当USE_PLN_POOL为2或3时,按照CALC_AS_DECIMAL=2处理(USE_PLN_POOL默认为1)
进行验证测试:
1、设置CALC_AS_DECIMAL参数值为2,并重启数据库生效
SQL> sp_set_para_value(2,'CALC_AS_DECIMAL',2);
--重启数据库;
SQL> select para_name,para_value from v$dm_ini where para_name='CALC_AS_DECIMAL';
行号 PARA_NAME PARA_VALUE
---------- --------------- ----------
1 CALC_AS_DECIMAL 2
2、执行测试SQL
SQL> select (SYSDATE - to_date('2020-10-26 20:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60 from dual;
行号 (SYSDATE-TO_DATE('2020-10-2620:39:05','YYYY-MM-DDhh24:mi:ss'))*24*60
---------- --------------------------------------------------------------------
1 65.0666666666664
已用时间: 1.199(毫秒). 执行号:5.
SQL> select ceil((SYSDATE - to_date('2020-10-26 20:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60) from dual;
行号 CEIL((SYSDATE-TO_DATE('2020-10-2620:39:05','YYYY-MM-DDhh24:mi:ss'))*24*60)
---------- --------------------------------------------------------------------------
1 66
已用时间: 0.650(毫秒). 执行号:6.
SQL> select to_char(ceil((SYSDATE - to_date('2020-10-26 10:39:05','YYYY-MM-DD hh24:mi:ss')) * 24 * 60)) from dual;
行号 TO_CHAR(CEIL((SYSDATE-TO_DATE('2020-10-2610:39:05','YYYY-MM-DDhh24:mi:ss'))*24*60))
---------- -----------------------------------------------------------------------------------
1 666
已用时间: 0.640(毫秒). 执行号:7.
可以观察到,将CALC_AS_DECIMAL参数设置为2生效后,结果与Oracle中执行相同。
修改CALC_AS_DECIMAL参数值为2,并重启数据库生效并验证。
Step1:sp_set_para_value(2,‘CALC_AS_DECIMAL’,2);
Step2:重启数据库
文章
阅读量
获赞