处理Oracle中的精确差异

时间:2009-08-31 17:29:31

标签: sql oracle plsql

我在Oracle中有一条查询生成离散百分位数:

...
PERCENTILE_DISC(0.9999) WITHIN GROUP(ORDER BY DURATION_COUNT) as PERCENTILE_9999_QTY,   
...

PERCENTILE_9999_QTY的数据类型为Number(8)

它工作正常,但在某些情况下我收到此错误:

  

ORA-01438:大于此指定精度的值   柱

我不想更改Number(8)数据类型。有没有办法确保该值符合Number(8)精度?

2 个答案:

答案 0 :(得分:2)

如果结果不适合您的N(8)列,那么除了(a)引发异常,或(b)改为其他内容之外,您无能为力:

SELECT ...
   CASE
      WHEN PERCENTILE_DISC(0.9999)
           WITHIN GROUP(ORDER BY DURATION_COUNT)
           < 100000000
      THEN PERCENTILE_DISC(0.9999)
           WITHIN GROUP(ORDER BY DURATION_COUNT)
      ELSE NULL
   END as PERCENTILE_9999_QTY,
...

答案 1 :(得分:1)

来自documentation

  

此函数将任何参数作为参数   numeric数据类型或任何非数字   可以隐式的数据类型   转换为数字数据类型。的的   函数返回与...相同的数据类型   参数的数值数据类型

如果要将Number(8)作为输出,则必须在适合NUMBER(8)的数据集上执行此功能。