제어문은 모든 프로그램의 기본이야. SQL 스크립트든, Python 코드든, 아니면 화성에서 집에 신호를 보낼지, 크레이터 뒤에서 생명체를 찾을지 고민하는 로봇이든 다 마찬가지지.
PL/pgSQL에서 제어문은 우리한테 이런 걸 도와줘:
- 조건이 맞으면 특정 동작을 실행할 수 있어.
- 코드 실행 순서를 제어할 수 있어.
- 의사결정 로직을 구현할 수 있어.
이걸 도로의 신호등이라고 생각해봐: "STOP 표지판이 보이면 멈춰. 초록불이면 가는 거지!"
PL/pgSQL에서 제일 많이 쓰는 제어문은:
IF– 조건을 체크해서 맞으면 해당 코드를 실행해.CASE– 조건이 여러 개일 때IF대신 쓰면 좋아.RETURN– 함수 실행을 끝내고 결과를 반환해.
이미 이런 거 본 적 있을 거야. 다른 프로그래밍 언어 해봤으면 금방 익힐 수 있어.
조건문 IF
IF는 어떤 조건이 TRUE일 때만 코드를 실행할 때 써. 기본 구조는 이래:
IF 조건 THEN
-- 조건이 참이면 실행되는 코드
ELSE
-- 조건이 거짓이면 실행되는 코드
END IF;
숫자를 받아서 짝수인지 홀수인지 알려주는 함수를 만들어보자:
CREATE OR REPLACE FUNCTION check_even_odd(num INTEGER)
RETURNS TEXT AS $$
BEGIN
IF num % 2 = 0 THEN
RETURN '숫자가 짝수야';
ELSE
RETURN '숫자가 홀수야';
END IF;
END;
$$ LANGUAGE plpgsql;
이제 테스트해보자:
SELECT check_even_odd(4); -- 숫자가 짝수야
SELECT check_even_odd(7); -- 숫자가 홀수야
간단 설명: IF num % 2 = 0 THEN은 숫자가 2로 나누어떨어지는지 확인하는 거야.
ELSIF 조건
가끔 한 번만 체크하는 걸로는 부족할 때가 있어. 여러 조건을 체크하려면 ELSIF를 쓰면 돼.
예를 들어, 온도에 따라 텍스트 메시지를 반환하는 함수를 만들어보자:
CREATE OR REPLACE FUNCTION temperature_comment(temp INTEGER)
RETURNS TEXT AS $$
BEGIN
IF temp < 0 THEN
RETURN '엄청 추워!';
ELSIF temp >= 0 AND temp <= 20 THEN
RETURN '쌀쌀해';
ELSE
RETURN '따뜻해!';
END IF;
END;
$$ LANGUAGE plpgsql;
테스트:
SELECT temperature_comment(-5); -- 엄청 추워!
SELECT temperature_comment(15); -- 쌀쌀해
SELECT temperature_comment(25); -- 따뜻해!
CASE 문법
조건이 많아지면 CASE가 진짜 편해. IF랑 비슷하지만 좀 더 "깔끔"하지.
CASE
WHEN 조건_1 THEN 값_1
WHEN 조건_2 THEN 값_2
ELSE 기본값
END;
숫자 점수에 따라 텍스트 평가를 반환하는 함수를 만들어보자:
CREATE OR REPLACE FUNCTION grade_comment(score INTEGER)
RETURNS TEXT AS $$
BEGIN
RETURN CASE
WHEN score >= 90 THEN '최고야'
WHEN score >= 75 THEN '좋아'
WHEN score >= 50 THEN '괜찮아'
ELSE '별로야'
END;
END;
$$ LANGUAGE plpgsql;
테스트:
SELECT grade_comment(95); -- 최고야
SELECT grade_comment(80); -- 좋아
SELECT grade_comment(45); -- 별로야
참고: IF와 달리 CASE는 값을 반환하니까 RETURN을 CASE 안에서 바로 쓸 수 있어.
RETURN 문
RETURN은 함수 실행을 끝내고 값을 반환해. PL/pgSQL에서 함수는 뭔가를 꼭 반환해야 해 (예: 텍스트, 숫자 등).
아주 간단한 예제로 RETURN이 어떻게 동작하는지 보자:
CREATE OR REPLACE FUNCTION return_example()
RETURNS TEXT AS $$
BEGIN
RETURN 'Hello, World!';
END;
$$ LANGUAGE plpgsql;
결과:
SELECT return_example(); -- Hello, World!
근데 코드 분기가 여러 개면 어떡하지? 예를 들어, 입력값을 체크할 때 RETURN을 여러 군데서 쓸 수 있어:
CREATE OR REPLACE FUNCTION check_positive_negative(num INTEGER)
RETURNS TEXT AS $$
BEGIN
IF num > 0 THEN
RETURN '양수야';
ELSIF num = 0 THEN
RETURN '영이야';
ELSE
RETURN '음수야';
END IF;
END;
$$ LANGUAGE plpgsql;
테스트:
SELECT check_positive_negative(10); -- 양수야
SELECT check_positive_negative(0); -- 영이야
SELECT check_positive_negative(-5); -- 음수야
자주 하는 실수랑 헷갈릴 수 있는 부분
END빼먹기:END CASE;나END IF;를 까먹으면 PostgreSQL이 바로 코드 블록을 끝내라고 알려줄 거야.ELSIF쓸 때 논리 실수: 조건 순서가 중요해! 더 넓은 조건(temp > 0)이 더 구체적인 조건(temp > 20)보다 먼저 오면 안 돼.RETURN빼먹기: PL/pgSQL 함수에서RETURNS를 선언했으면 꼭 뭔가 반환해야 해.
여기까지야. PL/pgSQL에서 제어문과 로직의 기본을 알아봤어. 이거 알면 더 복잡한 함수 만들 때 진짜 유용할 거야! 다음엔 반복문(루프)이랑 그 사용법을 배워볼 거야.
GO TO FULL VERSION