반응형
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
)
반응형
'개발이야기 > PostgreSQL' 카테고리의 다른 글
[PostgreSQL] json_build_object, json_agg 사용법, 예제, 활용하기 (JSON Functions) (0) | 2025.01.14 |
---|---|
[PostgreSQL] division by zero 에러 해결하기 (CASE문, NULLIF, COALESCE) (0) | 2024.08.02 |
[PostgreSQL] ORDER BY 특정 순서로 먼저 정렬 하기 (ORDER BY CASE WHEN, ORDER BY CASE WHEN IN (0) | 2024.07.17 |
[PostgreSQL] Function 동적 페이징 처리하기 (LIMIT, OFFSET) (0) | 2024.01.05 |
[PostgreSQL] 테이블, Function 생성 후 조회하기 (1) | 2024.01.04 |
댓글