
오라클 데이터베이스에서 함수(Function)와 프로시저(Procedure)는 둘 다 특정 로직을 저장해두고 필요할 때 호출하는 객체(PL/SQL)라는 공통점이 있습니다. 하지만 "왜 호출하는가?"와 "어떻게 값을 돌려받는가?"라는 목적에서 뚜렷한 차이가 납니다.
쉽게 비유하자면, 함수는 자판기(동전을 넣으면 결과가 나옴) 같고, 프로시저는 서비스 센터의 작업 지시서(특정 작업을 수행함) 같습니다.
| 구분 | 함수 (Function) | 프로시저 (Procedure) |
|---|---|---|
| 반환값 (Return) | 반드시 하나의 값을 반환함 | 반환값이 없을 수도 있고, 여러 개일 수도 있음 (OUT 파라미터 사용) |
| 목적 | 계산을 통한 값의 도출 | 특정 비즈니스 로직 수행 (데이터 조작 등) |
| SQL문 사용 | SELECT, WHERE 절 등에 직접 사용 가능 | SQL문 내에서 직접 호출 불가 (EXECUTE 등으로 실행) |
| DML 사용 | 제한적 (주로 조회용으로 사용 권장) | INSERT, UPDATE, DELETE 등 자유롭게 사용 가능 |
함수는 반드시 하나의 결과값을 돌려줘야 합니다. 우리가 수학에서 라고 하듯이, 입력값을 넣으면 계산된 결과값 하나가 튀어나오는 구조입니다.
RETURN 예약어가 필수입니다.-- SQL 문 안에서 바로 사용 가능
SELECT EMP_NAME, GET_ANNUAL_SALARY(SALARY) FROM EMPLOYEES;
프로시저는 특정 동작을 '실행'하는 데 초점이 맞춰져 있습니다. 값을 반환하기보다는 "데이터를 백업해라", "신규 회원을 등록해라" 같은 일련의 프로세스를 처리할 때 사용합니다.
RETURN 문이 필수는 아닙니다. 대신 OUT 파라미터를 통해 여러 값을 전달할 수 있습니다.-- 별도의 실행 명령어가 필요함
EXECUTE UPDATE_STOCK_QUANTITY(item_id => 101, qty => 5);
[핵심 팁]
단순한 계산이나 데이터 변환이 필요하다면 함수를, 데이터베이스의 상태를 변경하거나 복잡한 로직을 단계별로 실행해야 한다면 프로시저를 선택하는 것이 정석입니다.