Обработка разницы в точности в Oracle - PullRequest
0 голосов
/ 31 августа 2009

У меня есть часть моего запроса в 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 ]

2 голосов
/ 01 сентября 2009

Если результат не может поместиться в столбце N (8), тогда вы мало что можете сделать, кроме (а) создания исключения или (б) добавления чего-то другого:

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 голос
/ 01 сентября 2009

Из документации :

Эта функция принимает в качестве аргумента любую числовой тип данных или любой нечисловой тип данных, который может быть неявно преобразован в числовой тип данных. The функция возвращает тот же тип данных, что и числовой тип данных аргумента .

Если вы хотите, чтобы Number (8) использовался в качестве выходных данных, вы должны выполнить эту функцию для набора данных, который соответствует номеру (8).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...