如何在视图中捕获 'bigint out of range' 错误?

How to catch 'bigint out of range' error in a view?

我有一个包含三列的 table,lengthwidthheight,所有 integer 和约束不大于 1000000.

在计算体积时,我投射到 bigint 并且它完全合适。但是,我认为将音量乘以另一个值可能会导致

ERROR: bigint out of range

对于那些实际具有最大音量并且乘以大于 9 的任何值的记录。

有没有办法抓住它(例如 return NULL 而不是溢出时)而不是出现错误而不是 returning 任何东西?

我会在计算之前将值转换为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;