Oracle exp函数数值溢出错误

Ali*_*are 3 sql oracle plsql oracle10g oracle11g

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

   select exp(300) from dual
Run Code Online (Sandbox Code Playgroud)

而且我得到数字溢出错误,我怎么能从300或更大的数字指数,因为我不知道.

谢谢.

Bon*_*ist 6

exp(300)是1.942426e + 130,它大于Oracle NUMBER数据类型的范围 - 您在Oracle中可以拥有的最大数字是:9.99 ... 9 x 10 125,最多38位有效数字.

所以简而言之,不,你将无法在Oracle中计算exp(300).


ruu*_*van 5

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

但是有一些解决方法.

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

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