대덕인재/Oracle

[Oracle D-19] 이해가 안가서 다시 보는 왕초보 버전 프로시저(Procedure)와 함수(Function) 이야기

꼬마버거 2025. 4. 25. 20:23

🍼 프로시저(Procedure)와 함수(Function) 이야기

1. 둘 다 뭐야?

둘 다 "작업 묶음"이야.

  • SQL 여러 줄을 한 번에 묶어서 이름을 붙이는 것.
  • 매번 같은 SQL을 쓰는 게 귀찮으니까, 묶어두고 필요할 때 이름 부르면 자동으로 실행돼.

👉 그냥 "명령어 모음집" 이라고 생각하면 돼.


2. 비유로 설명할게 🍱

🍱 프로시저 (Procedure)는?

"편의점 도시락"이야.

  • 안에 뭐가 들었는지 몰라도,
  • 부르면 → "밥이랑 반찬"이 같이 나와.
  • 먹고 나면 끝이야. 따로 뭐 받는 거 없어.

👉 결과를 꼭 돌려주진 않아도 됨!
👉 작업 자체가 목적이야!


🍬 함수 (Function)는?

"자판기"야.

  • 버튼 누르면
  • 딱 하나! 음료수 하나를 꼭 돌려줘.

👉 **반드시 결과(RETURN)**를 하나 줘야 함.
👉 값을 받아오는 게 목적이야!


🧠 핵심 차이 요약!


 

구분 프로시저(도시락) 함수(자판기)
결과 반환 ❌ 없어도 됨 ✅ 꼭 하나 줘야 함
목적 일을 처리하는 것 값을 돌려주는 것
SQL문 안에서 사용 ❌ (SELECT문에서 못 씀) ✅ (SELECT문 안에서도 사용 가능)
예시 회원가입 처리, 주문 저장 나이 계산, 할인율 계산

🛠 쉽게 코드 비교

🍱 프로시저 (도시락 만들기)

CREATE OR REPLACE PROCEDURE make_lunch IS
BEGIN
    INSERT INTO lunch_box (menu) VALUES ('김밥+떡볶이+음료수');
END;

부르면 → 도시락 만들어주고 끝!

BEGIN
    make_lunch;
END;

🍬 함수 (자판기에서 음료 뽑기)

CREATE OR REPLACE FUNCTION get_coke RETURN VARCHAR2
IS
BEGIN
    RETURN '코카콜라 한 캔';
END;

부르면 → 코카콜라를 꼭 하나 돌려줘!

SELECT get_coke FROM DUAL;

🔥 그래서 결론은

프로시저는 "일을 시키는 거"
함수는 "값을 받아오는 거"

딱 이 차이야!


✅ 다시 한번 왕초 간단 요약


 

구분 한마디로
프로시저 명령 묶음 일 시키기
함수 계산 후 값 반환 결과 받기

💬 예를 들면 이런 차이야


 

하고 싶은 일 쓰는 것
회원가입 처리하기 프로시저
나이 계산해서 보여주기 함수
주문 내역 저장하기 프로시저
총 합계 구해서 보여주기 함수

💡 마지막 정리 문장

"프록시저는 일을 해주고, 함수는 결과를 꼭 주는 친구다."