TRY 표현식
TRY 표현식 (TRY Expression)
TRY 표현식은 자식(스칼라) 표현식에서 입력 행 때문에 생기는 오류를 쿼리 전체가 실패하게 두지 않고, 그 행에 대해서만 NULL로 바꿔 주는 안전장치예요. 하나씩 검증하기 번거로울 때 아주 유용해요.
TRY표현식은TRY_CAST표현식에서 영감을 받았어요.
출처: 문서
본문
예시 (Examples)
다음 호출들은 TRY 표현식 없이 실행하면 오류를 내요. TRY 표현식으로 감싸면 NULL을 반환하지요.
캐스팅 (Casting)
TRY 없이
SELECT 'abc'::INTEGER;
Conversion Error:
Could not convert string 'abc' to INT32
TRY를 쓰면
SELECT TRY('abc'::INTEGER);
NULL
0의 로그 (Logarithm on Zero)
TRY 없이
SELECT ln(0);
Out of Range Error:
cannot take logarithm of zero
TRY를 쓰면
SELECT TRY(ln(0));
NULL
여러 행 캐스팅 (Casting Multiple Rows)
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 |
제한 사항 (Limitations)
TRY는 휘발성(volatile) 함수, 집계(aggregate) 함수, 또는 스칼라 서브쿼리와 함께 사용할 수 없어요. 예를 들어:
SELECT TRY(random())
Binder Error:
TRY can not be used in combination with a volatile function