대덕인재/Oracle

[Oracle D-19] 프로시저 (Procedure)

꼬마버거 2025. 4. 25. 11:37

📌 프로시저(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로 호출
장점 재사용성, 보안성, 속도, 예외처리 가능