개발이야기/PostgreSQL

[PostgreSQL] Function IF문 / CASE문 사용방법, 예제

후린개발자 2024. 1. 23.
반응형

PostgreSQL Function에서 많이 사용하는 IF문과 CASE문을 사용하여 두 개의 정수 매개변수 (num1/num2)를 받아와 문자열로 결과를 반환하고 있습니다.

1. IF문 / CASE문 사용방법

1) IF문

IF문 사용법

IF 조건 THEN
    -- 조건이 참일 때 수행되는 블록
ELSIF 다른조건 THEN
    -- 다른 조건이 참일 때 수행되는 블록
ELSE
    -- 어떤 조건도 만족하지 않을 때 수행되는 블록
END IF;



2) CASE문

CASE문 사용법

CASE
    WHEN 조건 THEN
        -- 조건이 참일 때 수행되는 블록
    WHEN 다른조건 THEN
        -- 다른 조건이 참일 때 수행되는 블록
    ELSE
        -- 어떤 조건도 만족하지 않을 때 수행되는 블록
END CASE;

 

2. 함수생성

CREATE OR REPLACE FUNCTION scheduler.ufx_test(num1 integer, num2 integer)
 RETURNS character varying
 LANGUAGE plpgsql
AS $function$
DECLARE 
    ifResult      varchar := 'ifResult:';
   	caseResult    varchar := 'caseResult:';
begin
	RAISE NOTICE 'num1: %, num2: %', num1, num2; -- 추가 디버깅용 출력
	
    -- IF문
    IF num1 > num2 THEN
        ifResult := ifResult || 'num1이 num2보다 큽니다';
    ELSIF num1 < num2 THEN
        ifResult := ifResult || 'num1이 num2보다 작습니다';
    ELSE
        ifResult := ifResult || 'num1이 num2와 같습니다';
    END IF;

    IF num1 % 2 = 0 THEN
        ifResult  := ifResult  || ', num1은 짝수입니다';
    ELSE
        ifResult  := ifResult  || ', num1은 홀수입니다';
    END IF;

    IF num2 < 0 THEN
        ifResult  := ifResult  || ', num2는 음수입니다';
    ELSE
        ifResult  := ifResult  || ', num2는 음수가 아닙니다';
    END IF;

    -- CASE문
    CASE 
        WHEN num1 % 2 = 0 THEN
            caseResult := caseResult || 'num1은 짝수입니다';
        ELSE
            caseResult := caseResult || 'num1은 홀수입니다';
    END CASE;

    CASE 
        WHEN num2 < 0 THEN
            caseResult := caseResult || ', num2는 음수입니다';
        WHEN num2 = 0 THEN
            caseResult := caseResult || ', num2는 0입니다';
        ELSE
            caseResult := caseResult || ', num2는 양수입니다';
    END CASE;

    CASE 
        WHEN num1 > 0 AND num2 > 0 THEN
            caseResult := caseResult || ', num1과 num2 모두 양수입니다';
        WHEN num1 < 0 AND num2 < 0 THEN
            caseResult := caseResult || ', num1과 num2 모두 음수입니다';
        ELSE
            caseResult := caseResult || ', num1과 num2는 부호가 다릅니다';
    END CASE;

   	RAISE NOTICE 'ifResult: %, caseResult: %', ifResult, caseResult; -- 추가 디버깅용 출력
   
    RETURN ifResult || ',' || E'\n' || caseResult;


END
$function$
;



-IF 문: num1과 num2 사이의 관계를 확인하며, num1이 짝수인지 홀수인지, 그리고 num2가 음수인지 아닌지를 확인합니다.

-CASE 문: 여러 조건에 따라 다른 동작을 수행하기 위해 사용됩니다. 세 가지 CASE 문이 있으며 각각 다른 조건을 처리합니다.

3. 함수호출

1) 예제 1

SELECT * FROM scheduler.ufx_test
(
    num1   =>5::INTEGER ,
    num2   =>10::INTEGER 
)


2) 예제 2

SELECT * FROM scheduler.ufx_test
(
    num1   =>5::INTEGER ,
    num2   =>-1::INTEGER 
)

 


3) 예제 3

SELECT * FROM scheduler.ufx_test
(
    num1   =>0::INTEGER ,
    num2   =>-1::INTEGER 
)

 

반응형

댓글

💲 추천 글