목차
- PL/pgSQL?
- PL/pgSQL 특징
- PL/pgSQL - 구조
- PL/pgSQL - Procedure
PL/pgSQL?
PostgreSQL에서 Procedure는 PL/pgSQL(Procedural Language/PostgreSQL)이라는
내장된 프로시저 언어를 사용하여 작성됨
1
| SELECT * FROM pg_catalog.pg_extensions;
|
PL/pgSQL 특징
- 조건문과 반복문
IF-THEN-ELSE, CASE문 등과 같은 조건문과
FOR, WHILE 루프 등과 같은 반복문을 사용하여 제어할 수 있음 - 예외 처리
예외 처리 기능을 통해 Procedure나 Function 내에서 발생할 수 있는 예외를 처리할 수 있어
안정성읖 높이고 오류에 대한 적절한 대응을 할 수 있게 함 - 트랜잭션 관리
여러 SQL문을 논리적인 블록으로 묶고 롤백 또는 커밋을 수행할 수 있음 - 재사용
로직을 모듈화하여 재사용성을 높일 수 있음
PL/pgSQL 구조
1
2
3
4
5
6
7
| DECLARE
-- 선언 부분 : 변수, 상수 및 데이터 타입 정의
BEGIN
-- 실행 부분 : 실행 코드
EXCEPTION
-- 예외처리 부분 : 예외처리 코드 작성
END;
|
PL/pgSQL - Procedure
PostgreSQL Procedure는 처리 결과를 Return할 수 없다.
1) 기본적인 Procedure 생성
1
2
3
4
5
6
7
8
| CREATE OR REPLACE PROCEDURE sample_procedure()
AS $$
BEGIN
UPDATE sample_table
SET sample_columns = 'sample_values'
WHERE sample_columns IS NULL;
END;
$$ LANGUAGE plpgsql;
|
2) Procedure 실행
1
| Call sample_procedure()
|
3) 매개변수를 사용하는 Procedure
1
2
3
4
5
6
7
8
| CREATE OR REPLACE PROCEDURE sample_procedure(smaple_parameters VARCHAR)
AS $$
BEGIN
UPDATE sample_table
SET sample_columns = 'sample_values'
WHERE sample_columns = smaple_parameters;
END;
$$ LANGUAGE plpgsql;
|
4) Procedure 예외처리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| CREATE OR REPLACE PROCEDURE sample_procedure(smaple_parameters VARCHAR)
AS $$
DECLARE
v_sqlstate VARCHAR;
v_message_text VARCHAR;
v_message_detail VARCHAR;
v_message_hint VARCHAR;
v_exception_context VARCHAR;
BEGIN
UPDATE sample_table
SET sample_columns = 'sample_values'
WHERE sample_columns = smaple_parameters;
EXCEPTION
WHEN OTHERS THEN
GET STACKED DIAGNOSTICS v_message_text = MESSAGE_TEXT, v_message_detail = PG_EXCEPTION_DETAIL, v_message_hint = PG_EXCEPTION_HINT, v_sqlstate = RETURNED_SQLSTATE, v_exception_context = PG_EXCEPTION_CONTEXT;
RAISE NOTICE '예외 발생: SQLSTATE=%, MESSAGE_TEXT=%, PG_EXCEPTION_DETAIL=%, PG_EXCEPTION_HINT=%, PG_EXCEPTION_CONTEXT=%', v_sqlstate, v_message_text, v_message_detail, v_message_hint, v_exception_context;
END;
$$ LANGUAGE plpgsql;
|