[PostgreSQL] 함수: 분기
plpgsql도 일반적인 언어들과 마찬가지로 제어문을 통한 분기 처리를 제공한다.
문법구조가 좀 구닥다리이긴 하지만
if-else문
if문은 이런식으로 쓸 수 있다.
CREATE FUNCTION FOO() RETURNS TEXT
AS
$$
DECLARE
foo TEXT = 'foo';
BEGIN
IF foo = 'foo'
THEN foo = 'bar';
END IF;
RETURN foo;
END
$$
LANGUAGE PLPGSQL;
분기문은 If ... End If; 안에 감싸인 형태로 표현되며, 조건식이 참일 경우에만 then 구문이 실행된다.
elseif와 else 등을 사용하면 중첩분기를 작성할 수 있다.
CREATE FUNCTION FOO2() RETURNS TEXT
AS
$$
DECLARE
foo TEXT = 'foo';
BEGIN
IF foo = 'foo!'
THEN foo = 'bar';
ELSEIF foo = 'foo?'
THEN foo = 'bar!';
ELSE
foo = '!!!!';
END IF;
RETURN foo;
END
$$
LANGUAGE PLPGSQL;
그리고 elseif는 몇개라도 추가가 가능하다.

그렇다.
case문
case문은 기존 명령형 언어들에서 switch라고 하는 것과 동등한 구문이다.
그리고 postgres의 case문과도 거의 동일한 구조다.
case ... end case; 에 감싸인 형태를 띠며, 다중분기를 처리할 때 좋다.
when-then 쌍으로 각각의 분기를 표현할 수 있으며, else로 나머지 상황을 처리할 수 있다.
CREATE FUNCTION FOO3() RETURNS TEXT
AS
$$
DECLARE
foo TEXT = 'foo';
BEGIN
CASE
WHEN foo = '으악'
THEN foo = '!!!';
WHEN foo = '아악'
THEN foo = '???';
ELSE
foo = '####';
END CASE;
RETURN foo;
END
$$
LANGUAGE PLPGSQL;
그렇다.
참조
http://www.gisdeveloper.co.kr/?p=4582
http://www.gisdeveloper.co.kr/?p=4601