[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