Oracle PL/SQL to PostgreSQL PL/pgSQL 변환
PL/SQL과 PL/pgSQL은 각각 오라클과 PostgreSQL 데이터베이스에서 사용되는 절차적 프로그래밍 언어입니다. 이 언어들은 데이터베이스 내에서 비즈니스 로직을 구현하고 데이터를 조작하는데 사용됩니다.
기능으로는 변수, 제어문 (IF, CASE, LOOP 등), 예외 처리 등의 기능을 사용할 수 있습니다.
프로시저, 함수 등의 데이터베이스 객체를 생성할 때 CREATE PROCEDURE, CREATE FUNCTION 등의 문법을 이용하여 사용 합니다.
아래 내용은 Oracle PL/SQL을 PostgreSQL PL/pgSQL로 변환시 체크해야할 사항들 기록 하였습니다.
1. 기본 구조
블록 구조로 되어 있으며, DECLARE, BEGIN, EXCEPTION 섹션으로 구분
항목 | PL/SQL | PL/pgSQL |
생성 | CREATE PROCEDURE procedure_name (parameters) IS |
CREATE PROCEDURE procedure_name (parameters) AS $$ |
선언 | DECLARE |
DECLARE |
실행 | BEGIN -- 실행코드 EXCEPTION -- 예외처리 END procedure_name; |
BEGIN -- 실행코드 EXCEPTION -- 예외처리 END; |
종료 | / | $$ LANGUAGE plpgsql; |
2. 선언
프로시저, 함수, 블록 내에서 사용할 변수나 상수를 선언하는 부분
항목 | PL/SQL | PL/pgSQL |
CLOB | variable_name CLOB; | variable_name TEXT; |
BLOB | variable_name BLOB; | variable_name BYTEA |
VARCHAR2 | variable_name VARCHAR2(); | variable_name VARCHAR(); |
NUMBER | variable_name NUMBER(); | variable_name NUMERIC(); |
값 할당 | variable_name = 값; | variable_name := 값; |
CURSOR | CURSOR cursor_name IS -- 커서 실행 코드 |
cursor_name CURSOR FOR -- 커서 실행 코드 |
CURSOR (parameter) | CURSOR cursor_name(parameter) IS -- 커서 실행 코드 |
cursor_name CURSOR (parameter) FOR -- 커서 실행 코드 |
3. 실행
일반적으로 BEGIN과 END 키워드 사이에 실행할 코드가 위치하며, 해당 코드는 하나의 논리적 블록으로 실행됩니다. 블록은 문장들의 시퀀스로 이루어지며, 이들 문장들은 순차적으로 실행됩니다.
항목 | PL/SQL | PL/pgSQL |
FROM dual; 임시 테이블 |
SELECT 'test' FROM dual; |
SELECT 'test'; -- 임시 테이블 명시 없이 가능 |
systimestamp 시간출력 |
SELECT systimestamp FROM dual; |
SELECT current_timestamp; |
ROWNUM 일부 ROW출력 |
SELECT * FROM table_name WHERE rownum < 10; |
SELECT * FROM table_name LIMIT 9; |
(+) OUTER JOIN |
SELECT * FROM table1 a, table2 b WHERE a.col1 = b.col1 (+) |
SELECT * FROM table1 a LEFT OUTER JOIN table2 b ON a.col1 = b.col1; |
DECODE | SELECT DECODE (col1, 100, 'A', 90, 'B', 'C') FROM test; |
SELECT CASE col1 WHEN 100 THEN 'A' WHEN 90 THEN 'B' ELSE 'C' END FROM test; |
Unique column에 중복값 예외처리 | EXCEPTION WHEN DUP_VAL_ON_INDEX THEN --예외 처리 RETURN; |
EXCEPTION WHEN UNIQUE_VIOLATION THEN --예외 처리 RETURN; |
0 나누기 연산 예외처리 | EXCEPTION WHEN ZERO_DIVIDE THEN --예외 처리 RETURN; |
EXCEPTION WHEN DIVISION_BY_ZERO THEN --예외처리 RETURN; |
OUTPUT text 출력 |
DBMS_OUTPUT.PUT_LINE('text'); | RAISE NOTICE '%' , 'text'; |
글 : 허원무 수석보 ( 비트나인 DB Tech팀 )
'DBMS > 활용 사례' 카테고리의 다른 글
그래프 기반 고객 행동 데이터 모델링 및 분석 방법론 (0) | 2023.09.03 |
---|---|
그래프로 찾아가는 신약 개발 (0) | 2023.09.03 |
Data Lineage 활용 사례 (0) | 2023.09.03 |
Graph Database와 OGM (0) | 2023.09.02 |
Terraform 개념과 설치 (0) | 2023.08.30 |