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

더 알아보기 (Learn more)