如何在oracle中更改数学函数的精度

如何在oracle中更改数学函数的精度,oracle,Oracle,如何更改oracle中函数ln和power的精度?我得到了非常精确的结果——40位数。问题是我有一个巨大的表格,因此,计算非常长,我不需要那种精度。标准的7或16位数就可以了,而且可能会加快计算速度。请注意,我不是在问圆函数,因为它只会改变结果的格式,不会影响计算本身 编辑 我的真实疑问很复杂,为了让事情简单化,让我们考虑< /P> select ln(2) from dual; 结果,我变得 .6931471805599453094172321214581765680782 鉴于,我希望得到

如何更改oracle中函数ln和power的精度?我得到了非常精确的结果——40位数。问题是我有一个巨大的表格,因此,计算非常长,我不需要那种精度。标准的7或16位数就可以了,而且可能会加快计算速度。请注意,我不是在问圆函数,因为它只会改变结果的格式,不会影响计算本身

编辑 我的真实疑问很复杂,为了让事情简单化,让我们考虑< /P>
select ln(2) from dual;
结果,我变得 .6931471805599453094172321214581765680782
鉴于,我希望得到,例如69314718,但不是通过四舍五入最终结果6931471805599453094172321214581765680782。我想避免计算那些额外的数字。

只需trunc ln以避免四舍五入

    select trunc(ln(2),7),ln(2) from dual;
产出:

     0.6931471  0.693147180559945

事实证明,将参数转换为二进制双精度是解决效率问题的完美方法。对于二进制双参数,幂函数和ln函数生成二进制双参数结果。现在,我的两个查询都是在几分钟内进行计算的,而不是1小时15分钟40分钟。

请通过示例数据和所需输出详细说明您的问题。没有更改函数返回值精度的设置。但是,为了提高性能,您可以尝试传入浮点数据类型而不是数字数据类型。看这个。但是要小心,你可能不会导致性能问题。谢谢。oracle中ln和power的性能令人失望。我有一个CREATETABLE with parallel 12子句,它查询具有数亿条记录的联接表。select子句非常广泛。整个创建表指令在1小时15分钟内完成。在我排除select子句中的两个ln操作之后,指令将在几分钟内进行计算。除了ln操作消失这一事实之外,没有任何变化。此外,我有一个create table with parallel 12子句,在一个具有相对较小select子句的表上进行查询。整个过程在40分钟内完成。在我排除select子句中的两个幂运算后,计算时间缩短为几分钟。周一,当我到达工作场所时,我将尝试将参数转换为二进制浮点数。如果我错了,请纠正我,但您的代码似乎只会计算所有数字,然后截断结果。我的问题在另一个层面上。我用ln函数计算所有这些数字的效率有问题。因此,真正的任务是强制函数ln只计算7位数字。这就是为什么我不想使用round或trunc。