본문 바로가기
개발 지식

[MySQL] 프로시저와 함수의 차이

by youuuu_h 2024. 11. 8.

[ 프로시저와 함수의 차이 ]

  1. Procedure 프로시저란 무엇인가?
  2. Function 함수란 무엇인가?
  3. DELIMITER 란?
  4. 프로시저와 함수의 차이 

1. PROCEDURE 프로시저란 무엇인가?

1.1 프로시저란? 

프로시저의 정확한 명칭은 저장 프로시저(Stored Procedure)이다. Stored는 '저장하다', Procedur는 '절차'를 의미한다. 

즉, 저장 프로시저는 일련의 쿼리를 저장하여 마치 함수처럼 실행하기 위한 쿼리의 집합을 의미한다. 어떠한 동작을 일괄 처리하기 위한 용도로 사용된다. 자주 사용하는 일반적인 쿼리를 반복하는 것 보다는 프로시저로 묶어놓고, 필요할때마다 간단히 호출하여 편리하게 사용이 가능하다. 

1.2  프로시저의 특징

  1. 하나의 요청으로 여러 SQL문 실행이 가능하다.
  2. 리턴값은 있을수도, 없을수도 있다. (IN, OUT의 유연성)
  3. 여러 개의 리턴값이 존재할 수 있다.
  4. 재사용성이 좋지 않다.
  5. CALL을 사용한 호출이 가능하다 (CALL procedure_name ; )

1.3 프로시저 작성 형식 

 

 


2. FUNCTION 함수란 무엇인가?

2.1 함수란?

함수의 정식 명칭도 저장 함수 (Sored Function)이다. 저장 함수는 하나의 특별한 목적이 있는 작업을 수행하기 위해 독립적으로 설계된 코드의 집합이다. MySQL에서 제공하는 내장 함수 외에 직접 함수를 만들 수 있는 기능을 제공한다. 저장 함수는 저장 프로시저와 모양이 비슷하지만 세부적인 기능이 다르다. 가장 명확한 차이는 사용 용도가 다르다는 것이며, RETURNS 예약어를 통해 하나의 값을 반드시 반환해야한다는 특징을 갖는다. 

2.2 함수의 특징 

  1. RETURNS로 반환할 값의 데이터 형식을 지정하고, 본문 안에는 RETURN문으로 하나의 값을 반환해야 한다. 
  2. 함수의 매개변수는 모두 입력 매개변수이다. (IN 명령어 필요 없음)
  3. SELECT문 안에서 호출이 가능하다. 
  4. 함수 사용을 위해서는 SQL 저장 함수 생성 권한을 허용해줘야 한다.

2.3 함수 작성 형식

 

 


3. DELIMITER 란?

DELIMITER는 MySQL에서 구문 구분자를 변경할 때 사용하는 명령어이다. 기본적으로 MySQL은 세미콜론(;)을 구문 구분자로 사용하여 각 명령어의 끝을 인식하지만, 함수나 프로시저처럼 여러 줄로 이루어진 복잡한 구문에서는 다른 구분자를 필요로 한다.

 

  함수나 프로시저는 본문 내에 여러 개의 SQL 명령어를 포함할 수 있는데, 이 경우 각 명령어의 끝에 세미콜론이 사용되므로 해당 세미콜론이 SQL 명령어의 끝을 의미하는지, 함수나 프로시저의 끝을 의미하는지 혼돈을 야기할 수 있다. 이를 해결하기 위해 DELIMITER 명령을 사용하여 임시로 구문 구분자를 변경하여 사용하는 것 이다. 

 

 


4. 프로시저와 함수의 차이 

 두 기능을 단순히 설명으로만 보았을 때, 프로시저와 함수 모두 매개변수를 받아 여러 작업을 수행하여 값을 반환한다는 점에서 동일한 기능이 아닌가?라고 생각할 수 있다. 하지만 함수와 프로시저는 사용하는 방식과 목적이 명확히 다르다.

  프로시저 함수 
의미 일련의 쿼리를 하나의 함수처럼 실행하기 위한 쿼리의 집합 ( 일련의 작업을 정리한 절차) 하나의 특별한 작업을 수행하기 위해 독립적으로 설계된 코드의 집합 
매개변수 입력만 받을 수 있음 입력, 출력을 모두 받을 수 있음
반환값 반환값은 필수 반환값은 필수가 아님(있어도 되고, 없어도 되고)
쿼리문 안에서 사용 여부 사용 불가 사용 가능 
사용 용도 로직을 기술하여 해당 업무를 처리하는 용도로 사용 로직을 도와주는 목적으로 사용