예외 블록은 조건을 확인하지 않고 트래핑 오류를 의미합니다. 즉, 컴파일시 일부 조건을 처리 할 수 있으면 오류로 잡히지 말고 일반적인 프로그램 로직으로 해결해야합니다.
에서 PL / pgSQL의 문서의 트래핑 오류 섹션 당신은 끝을 찾을 수 있습니다 :
팁 : EXCEPTION 절을 포함하는 블록은 블록이없는 블록보다 들어오고 나가는 데 훨씬 더 비쌉니다. 따라서 필요없이 EXCEPTION을 사용하지 마십시오.
예외 (나쁜) 또는 IF / THEN / ELSIF (더 나은)를 사용하는 대신이를 하나의 쿼리로 다시 작성할 수 있습니다.
SELECT c.data into data
FROM doc c
WHERE c.doc_id = id
and (
c.group_cur > group_cur
or
c.global_cur > global_cur
)
ORDER BY
-- this will make group always preferred over global
case when c.group_cur > group_cur then 1 else 2 end ASC,
-- and this is your normal ordering
c.id DESC
limit 1;
실제로 두 개의 쿼리를 원할 경우 특수 FOUND 변수를 사용하여 이전 쿼리에 결과가 있는지 테스트 할 수 있습니다.
select c.data into data
from doc c
where c.doc_id = id and c.group_cur > group_cur
order by c.id desc limit 1;
if not found then
select c.data into data
from doc c
where c.doc_id = id and c.global_cur > global_cur
order by c.id desc limit 1;
if not found then return null; end if;
end if;
의무적 인 RTFM 링크는 다음과 같습니다 :-)
참조 이 의 설명 FOUND
변수 및 이 에 대한 IF
/ THEN
블록.
select into
데이터를 반환하지 않으면 여전히 예외가 발생합니다.