본문 바로가기
💿DBMS/오라클

프로시저 vs. 함수

by 캔 2021. 7. 26.

DB에서 프로시저와 함수는 모두 사용자가 필요한 기능을 새롭게 정의하여 필요시에 호출할 수 있다는 공통점을 갖고 있다. 이런 공통점 때문에 둘의 차이를 헷갈릴 수 있기 위해 그 차이점을 명확하기 위해 글을 쓴다.

우선 들어가기 전에 둘의 차이를 리턴 값이 있느냐 없느냐에 따라 구분하는 것은 옳지 않다는 것을 미리 밝혀둔다. 왜냐면 프로시저도 리턴 값을 가질 수 있기 때문이다.

둘의 구조를 보면 알 수 있겠지만, 둘 다 리턴 값이 존재한다.

CREATE PROCEDURE 프로시저명(IN 매개변수명 데이터형,..., OUT 반환값명 데이터형)
BEGIN
	프로시저 내용;
END
CREATE FUNCTION 함수명(매개변수1 데이터형,... 매개변수n 데이터형)
RETURNS
BEGIN
	함수 내용;
    RETURN 반환값;
END

 

둘의 차이는 다음과 같다.

프로시저는 그 이름에서 알 수 있듯이 절차이다. SQL문들이 실행되는 순서를 정의한 절차, 즉 SQL의 집합이라고 할 수 있다. 따라서 프로시저 정의 시에 SQL문을 사용할 수 있지만 함수에서는 사용할 수 없다.

반면에 함수는 함수 내에 SQL문을 사용할 수 없지만, 함수를 정의하고 난 다음에는 SQL문 내에서 호출할 수 있다. 예를 들면, 다음과 같이 쿼리문의 일부로서 사용될 수 있다.

SELECT *, user_func() from table;