【问题标题】:Handle precision difference in Oracle在 Oracle 中处理精度差异
【发布时间】:2009-08-31 17:29:30
【问题描述】:

我在 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) 精度?

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    如果结果不适合您的 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,
    ...
    

    【讨论】:

      【解决方案2】:

      来自documentation

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-31
        • 2012-07-18
        • 2015-04-06
        • 1970-01-01
        • 2012-06-24
        • 2018-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多