如何在视图中捕获 'bigint out of range' 错误?
How to catch 'bigint out of range' error in a view?
我有一个包含三列的 table,length
、width
和 height
,所有 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;
我有一个包含三列的 table,length
、width
和 height
,所有 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;