📌 프로시저(Procedure)란?
✅ "작업을 묶어서 이름 붙여놓은 명령어 덩어리"
- 자주 반복되는 SQL 작업이 있다면? 👉 매번 복사해서 쓰지 말고 프로시저로 저장해 놓자!
- 프로시저는 DB 안에 저장되고, 이름으로 언제든 호출 가능
🍱 비유: "도시락 레시피"
도시락 가게가 있어.
매번 김밥, 불고기, 샐러드 만드는 방법을 새로 적는 건 귀찮잖아?
그래서 **레시피(프로시저)**를 한 번 써두고
"도시락 만들어줘!" 하면 그 레시피를 따라 자동으로 만들어주는 거야!
🛠 프로시저 기본 구조
CREATE OR REPLACE PROCEDURE 프로시저이름 (
입력값 IN 자료형,
결과값 OUT 자료형
)
IS
-- 변수 선언
BEGIN
-- 실행할 SQL문들
EXCEPTION
-- 오류가 나면 처리할 내용
END;
🧪 예제 1: 회원 등록 프로시저
CREATE OR REPLACE PROCEDURE insert_member (
p_id IN VARCHAR2,
p_name IN VARCHAR2
)
IS
BEGIN
INSERT INTO member (mem_id, mem_name)
VALUES (p_id, p_name);
COMMIT;
END;
👉 이건 insert_member라는 이름의 프로시저를 만들고,
두 개의 값을 받아서 member 테이블에 삽입하는 프로시저야!
🧨 그리고 이렇게 사용해!
BEGIN
insert_member('kim123', '김철수');
END;
그냥 함수처럼 이름 불러서 사용하면 됨! (값만 바꿔서 계속 재사용 가능!)
✅ 프로시저의 장점
| 장점 | 설명 |
| 🔁 재사용성 | 한 번 만들어 놓으면 계속 호출 가능 |
| 🔒 보안성 | 사용자에게 SQL 보여주지 않고 호출만 하게 가능 |
| ⚡ 속도 | 미리 컴파일되어 있어서 빠름 |
| 💥 오류처리 | EXCEPTION 블록으로 예외 처리 가능 |
✅ IN, OUT, IN OUT 이란?
| 키워드 | 뜻 | 예시 |
| IN | 외부에서 값 넣기 | 회원 ID 넣기 |
| OUT | 값을 밖으로 돌려주기 | 계산 결과, 메시지 등 |
| IN OUT | 값 넣고 바꿔서 돌려주기 | 계산기 같은 경우 |
🧪 예제 2: OUT 파라미터 (결과 돌려주기)
CREATE OR REPLACE PROCEDURE get_member_name (
p_id IN VARCHAR2,
p_name OUT VARCHAR2
)
IS
BEGIN
SELECT mem_name INTO p_name
FROM member
WHERE mem_id = p_id;
END;
사용 예:
DECLARE
v_name VARCHAR2(50);
BEGIN
get_member_name('kim123', v_name);
DBMS_OUTPUT.PUT_LINE('이름: ' || v_name);
END;
📦 실무에서 프로시저 언제 쓰냐면?
| 상황 | 사용 예 |
| 회원 등록 | insert_member |
| 급여 계산 | calc_salary |
| 자동 메일 발송 | send_email |
| 재고 업데이트 | update_stock |
🧠 정리 요약
| 개념 | 설명 |
| 프로시저란? | SQL문을 묶어서 이름 붙인 저장된 작업 |
| 언제 쓰나? | 자주 반복되는 작업이 있을 때 |
| 어떻게 쓰나? | CREATE PROCEDURE로 만들고, BEGIN ~ END로 호출 |
| 장점 | 재사용성, 보안성, 속도, 예외처리 가능 |
'대덕인재 > Oracle' 카테고리의 다른 글
| [Oracle D-19] 이해가 안가서 다시 보는 왕초보 버전 프로시저(Procedure)와 함수(Function) 이야기 (0) | 2025.04.25 |
|---|---|
| [Oracle D-19] 함수(Function) (0) | 2025.04.25 |
| [Oracle D-18] 커서 (CURSOR)/ 암시적 커서 (implicit cursor)와 명시적 커서 (explicit cursor) (0) | 2025.04.24 |
| [Oracle D-18] 반복문 (0) | 2025.04.24 |
| [Oracle D-18] 변수 (0) | 2025.04.24 |