TRY 表达式
TRY 表达式可确保:当子(标量)表达式因输入行导致错误时,这些行会返回 NULL,而不是让整个查询抛出错误。
TRY表达式的设计灵感来自TRY_CASTexpression。
示例
以下调用在不使用 TRY 表达式时会返回错误。
将它们包裹在 TRY 表达式中后,会返回 NULL:
类型转换
不使用 TRY
SELECT 'abc'::INTEGER;
Conversion Error:
Could not convert string 'abc' to INT32
使用 TRY
SELECT TRY('abc'::INTEGER);
NULL
对零取对数
不使用 TRY
SELECT ln(0);
Out of Range Error:
cannot take logarithm of zero
使用 TRY
SELECT TRY(ln(0));
NULL
多行类型转换
不使用 TRY
WITH cte AS (FROM (VALUES ('123'), ('test'), ('235')) t(a))
SELECT a::INTEGER AS x FROM cte;
Conversion Error:
Could not convert string 'test' to INT32
使用 TRY
WITH cte AS (FROM (VALUES ('123'), ('test'), ('235')) t(a))
SELECT TRY(a::INTEGER) AS x FROM cte;
| x |
|---|
| 123 |
| NULL |
| 235 |
限制
TRY 不能与易变函数(volatile function)或标量子查询一起使用。
例如:
SELECT TRY(random())
Binder Error:
TRY can not be used in combination with a volatile function