🌾 PL/SQL이 뭐야?
📜 공식 정의:
**PL/SQL (Procedural Language/SQL)**은 Oracle에서 제공하는 SQL을 확장한 프로그래밍 언어야.
SQL로는 힘든 조건문, 반복문, 변수 사용, 오류 처리 등을 할 수 있게 만들어진 거지.
💬 쉽게 말하면?
"SQL은 선언문만 있는 언어야.
PL/SQL은 그 SQL에 '조건문 + 반복문 + 함수 + 절차(Procedure)' 같은 두뇌를 붙여준 언어야."
"Oracle의 PL/SQL 프로그램 단위(Program Units) 로, 데이터베이스에서 반복작업, 계산, 이벤트 반응 등을 자동화하고 효율화하기 위해 사용된다."

⚙️ PL/SQL에서 가능한 것들
| 기능 | 설명 | 예시 |
| ✅ 변수 선언 | 값을 저장할 수 있음 | v_salary NUMBER; |
| 🔁 반복문 | 반복 작업 가능 | FOR i IN 1..10 LOOP ... END LOOP; |
| 🔀 조건문 | 조건 따라 다르게 처리 | IF ... THEN ... ELSE ... END IF; |
| 🧠 함수/프로시저 | 반복 작업 저장해두기 | CREATE PROCEDURE ... |
| 💣 예외 처리 | 오류에 자동 대응 가능 | EXCEPTION WHEN ... THEN ... |
🧱 PL/SQL 블록 구조 (기본틀)
DECLARE
-- 변수 선언
BEGIN
-- 실행할 SQL, 로직
EXCEPTION
-- 오류 처리
END;
- DECLARE: 변수 선언하는 공간 (선택사항)
- BEGIN: 주 실행부
- EXCEPTION: 오류 생겼을 때 처리할 부분
- END;: 종료!
🤔 PL/SQL 왜 써야 해?
| SQL만 쓸 때 | PL/SQL 쓸 때 |
| 조건, 반복 어려움 | 조건문, 반복문 가능 |
| 재사용 어려움 | 프로시저/함수로 재사용 가능 |
| 오류 처리 어려움 | EXCEPTION 블록으로 에러 대응 가능 |
| 자동화 불가 | 트리거나 루틴으로 자동 처리 가능 |
📌 요약 정리!
- PL/SQL은 Oracle 전용 SQL + 프로그래밍 언어
- 복잡한 업무 로직을 처리하기 위해 꼭 필요함
- 조건문, 반복문, 변수, 예외 처리, 프로시저 등을 쓸 수 있음
- 데이터베이스 자동화 작업, 복잡한 계산, 반복 업무에 탁월
🎓 한 줄 정의 정리:
| 개념 | 정의 |
| Anonymous Block | 이름이 없는 일회용 PL/SQL 코드 블록으로, 즉석에서 실행되고 저장되지 않음 |
| Stored Procedure | 이름이 있는 저장된 명령 블록으로, 반복 작업을 실행하기 위해 호출할 수 있음 |
| User Function | 입력값을 받아 결과값을 반환하는 사용자 정의 함수 |
| Package | 관련된 프로시저, 함수, 변수 등을 하나로 묶은 논리적 그룹 |
| Trigger | 특정 이벤트(INSERT, UPDATE, DELETE)가 발생할 때 자동으로 실행되는 PL/SQL 블록 |
🧱 1. Anonymous Block (익명 블록)
"이건 그냥 잠깐 쓰고 버리는 메모장이야."
💬 비유: 마을사람이 대나무 쪼가리에 임시로 적어두는 메모
예: "오늘은 논에 물대기 → 끝나면 불태우기"
💡 특징:
- 이름이 없어 (익명이야!)
- 한 번 실행하고 나면 사라져
- 자주 쓰는 일보다는 일회성 작업에 사용
BEGIN
DBMS_OUTPUT.PUT_LINE('안녕하세요 고조선!');
END;
🏺 2. Stored Procedure (저장 프로시저)
"이건 마을 공식 절차서야. 언제든지 꺼내서 쓸 수 있지."
💬 비유: 마을 공무원이 갖고 있는 절차 매뉴얼
예: "농사 시작 절차: 땅 고르기 → 씨 뿌리기 → 물 대기"
💡 특징:
- 이름이 있어서 언제든 호출 가능
- 반복되는 작업을 저장해두는 용도
- 입력값을 받고, 출력 없이 실행하는 경우 많음
CREATE PROCEDURE say_hello IS
BEGIN
DBMS_OUTPUT.PUT_LINE('고조선에 인사!');
END;
🧪 3. User Function (사용자 정의 함수)
"이건 계산기야! 입력하면 결과가 딱 나와."
💬 비유: 마을 계산사에게 '소 3마리 값 얼마야?' 물어보면 정확히 말해줌
💡 특징:
- 이름 있음
- 입력값 → 결과 반환
- SELECT 문 안에서도 쓸 수 있음
CREATE FUNCTION get_area(width NUMBER, height NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN width * height;
END;
📦 4. Package (패키지)
"이건 서랍장이야. 관련 절차들을 묶어 놓았지."
💬 비유: 마을 문서 보관함 — “농사 관련”, “건축 관련” 등 테마별로 정리
💡 특징:
- 여러 개의 프로시저, 함수, 변수 등을 묶어 놓은 것
- **패키지 사양(명세)**과 **본문(구현)**으로 나뉘어 있음
-- 명세
CREATE PACKAGE farming_pkg AS
PROCEDURE start_farming;
FUNCTION calc_crop_yield RETURN NUMBER;
END;
-- 본문
CREATE PACKAGE BODY farming_pkg AS
PROCEDURE start_farming IS
BEGIN
DBMS_OUTPUT.PUT_LINE('농사 시작!');
END;
FUNCTION calc_crop_yield RETURN NUMBER IS
BEGIN
RETURN 100;
END;
END;
⚡ 5. Trigger (트리거)
"이건 마을 감시꾼이야. 일이 생기면 바로 반응하지!"
💬 비유: 마을 창고지기가 말해. “누가 창고문 열면 나 바로 알람칠거야!”
💡 특징:
- 자동으로 실행됨 (데이터 삽입/수정/삭제될 때)
- 사람이 직접 실행하는 게 아님
- 데이터 변화를 감시하고 자동 반응
CREATE TRIGGER watch_dog
BEFORE INSERT ON villagers
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE('새로운 주민이 들어옵니다!');
END;
✨ 총정리 요약표
| 이름 | 뭐냐고? | 비유 | 언제 실행? |
| Anonymous Block | 1회용 메모 | 대나무 쪼가리에 쓴 메모 | 직접 실행 |
| Stored Procedure | 이름 있는 절차서 | 농사 매뉴얼 | 직접 실행 |
| Function | 입력 → 결과 주는 계산기 | 면적 계산기 | 직접 실행 or SELECT 안에서 |
| Package | 절차들을 서랍장처럼 정리한 것 | '농사' 관련 서랍장 | 직접 실행 |
| Trigger | 자동반응 시스템 | 창고 감시꾼 | 자동 실행 |
'대덕인재 > Oracle' 카테고리의 다른 글
| [Oracle D-18] 분기문 (0) | 2025.04.24 |
|---|---|
| [Oracle D-17] LOOP (0) | 2025.04.23 |
| [Oracle D-16] SYNONYM 객체 (0) | 2025.04.22 |
| [Oracle D-16] 비트맵 인덱스(Bitmap Index) (0) | 2025.04.22 |
| [Oracle D-16] 시퀀스(Sequence) (0) | 2025.04.22 |