📘 Oracle PL/SQL 기본 완벽 가이드: 집합적 언어와 절차적 언어의 만남
PL/SQL은 Oracle SQL에 절차적 프로그래밍 개념을 결합한 언어입니다. 오늘 이 글에서는 변수 선언부터 함수/프로시저까지 실무에서 자주 사용되는 내용만 깔끔한 예제와 함께 소개해드립니다.
1. PL/SQL이란 무엇인가?
PL/SQL은 SQL의 기능을 확장하여 조건문, 반복문, 예외처리 등을 가능하게 해주는 Oracle 전용 프로그래밍 언어입니다.
속도, 안정성, 유지보수성 모두 뛰어난 구조 덕분에 대부분의 Oracle 기반 시스템에서 널리 활용되고 있습니다.
💡 PL/SQL의 강점
- 절차적 로직 구현 가능
- DB 내부에서 실행되므로 성능 우수
- 함수/프로시저로 재사용성 향상
- 절차적 로직 구현 가능
- DB 내부에서 실행되므로 성능 우수
- 함수/프로시저로 재사용성 향상
2. PL/SQL 블록 기본 구조
DECLARE
-- 선언부 (생략 가능)
변수명 데이터타입 := 초기값;
BEGIN
-- 실행부
SQL 문장;
조건문, 반복문 등;
EXCEPTION
-- 예외 처리부
WHEN OTHERS THEN
예외 처리 문장;
END;
3. 변수와 상수 선언
테이블 컬럼과 동일한 타입을 쓰고 싶을 때는 %TYPE 속성을 사용하세요.
DECLARE
v_name employees.first_name%TYPE;
v_count NUMBER := 0;
pi CONSTANT NUMBER := 3.14;
4. 제어문
📌 IF 조건문
IF 조건 THEN
처리문;
ELSIF 조건2 THEN
처리문;
ELSE
처리문;
END IF;
🔁 FOR 반복문
FOR i IN 1..5 LOOP
DBMS_OUTPUT.PUT_LINE(i);
END LOOP;
🔁 WHILE 반복문
WHILE v_count < 10 LOOP
v_count := v_count + 1;
END LOOP;
5. 예외 처리
예외 발생 시 사용자 정의 메시지를 출력할 수 있습니다.
BEGIN
SELECT salary INTO v_sal FROM employees WHERE employee_id = 999;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('해당 사원이 존재하지 않습니다.');
END;
6. 함수(Function) 만들기
CREATE OR REPLACE FUNCTION get_bonus(p_salary NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN p_salary * 0.1;
END get_bonus;
💡 SELECT에서 호출 가능:
SELECT get_bonus(salary) FROM employees;
7. 프로시저(Procedure) 만들기
CREATE OR REPLACE PROCEDURE emp_info(p_id IN employees.employee_id%TYPE)
IS
v_name employees.first_name%TYPE;
BEGIN
SELECT first_name INTO v_name
FROM employees
WHERE employee_id = p_id;
DBMS_OUTPUT.PUT_LINE('이름: ' || v_name);
END emp_info;
💡 실행 방법:
EXEC emp_info(100);
📌 실전 팁: DML과 함께 사용하기
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM employees WHERE department_id = 50;
IF v_count = 0 THEN
INSERT INTO employees (employee_id, first_name)
VALUES (999, '테스트');
END IF;
END;
🔚 마무리
PL/SQL을 잘 활용하면 SQL만으로는 구현하기 어려운 비즈니스 로직을 효율적으로 처리할 수 있습니다.
오늘 소개한 내용을 바탕으로 프로시저, 함수, 조건문, 반복문을 직접 작성해보면서 익혀보세요!
'Oracle' 카테고리의 다른 글
| Oracle.예외처리와 트랜잭션 (0) | 2025.06.03 |
|---|---|
| Oracle.정규식(Regular Expressions) (0) | 2025.06.03 |
| Oracle.SQL고급 (0) | 2025.06.03 |
| Oracle.조인과 서브쿼리 (0) | 2025.05.31 |
| Oracle.그룹 쿼리와 집계함수 (1) | 2025.05.31 |