Oracle exp函数数值溢出错误

时间:2015-02-16 15:09:36

标签: sql oracle plsql oracle11g oracle10g

我试图在Oracle中做这样的事情:

   select exp(300) from dual

我收到数字溢出错误,如何从300或更大的数字开始指数,因为我不知道。

感谢。

2 个答案:

答案 0 :(得分:6)

exp(300)是1.942426e + 130,即greater than the range of Oracle's NUMBER datatype - 您在Oracle中可以拥有的最大数字是:9.99 ... 9 x 10 125 ,最多38个有效数字。

简而言之,不,您无法在Oracle中计算exp(300)。

答案 1 :(得分:5)

正如Boneist所说,Oracle NUMBER数据类型的比例从-84到127.EXP函数定义为接收NUMBER并返回NUMBER。因此EXP函数不能直接使用。

但是有一些解决方法。

  1. Binary_double可以存储1.79E308。因此,对于高达E308的数字,您可以通过将指数分解为小于E127的NUMBER,将它们转换为BINARY_DOUBLE并将结果相乘来使用它。

  2. 您还可以在Java / C ++ / VB等中使用external function来计算指数并将结果作为字符串返回。这将假设您不必对结果进行任何计算,否则您需要创建一个外部函数,在所有必要的计算之后返回最终结果。