Как отловить ошибку «bigint вне диапазона» в представлении? - PullRequest
1 голос
/ 12 июня 2019

У меня есть таблица с тремя столбцами, length, width и height, все integer с и ограничение не должно превышать 1000000.

При подсчете объема я делаю ставку на bigint и все подходит. Тем не менее, у меня есть вид, который умножает объем на другое значение, и это может привести к

ОШИБКА: bigint вне диапазона

для тех записей, которые на самом деле имеют максимальный объем и умножаются на что-либо больше 9.

Есть ли способ уловить это (например, вернуть NULL вместо переполнения) вместо того, чтобы выручить с ошибкой и ничего не вернуть?

1 Ответ

2 голосов
/ 12 июня 2019

Я бы преобразовал значение в numeric перед выполнением вычисления, чтобы избежать ошибки.

Если вам нужен результат как bigint, вы можете использовать такую ​​конструкцию:

WITH num_results AS (
   SELECT CAST(value AS numeric) * ... AS bigresult
   FROM ...
)
SELECT CASE WHEN bigresult BETWEEN -9223372036854775808 AND 9223372036854775807
            THEN CAST(bigresult AS bigint)
            ELSE NULL
       END, ...
FROM num_results;
...