백엔드/DBMS

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

능이개발자 2024. 1. 16. 15:12
728x90

프로시저 또한 매개변수를 받아 여러 작업을 수행하여 값을 반환할 수 있고 함수 또한 매개변수를 받아 여러 작업을 수행하여 값을 반환할 수 있지만 함수와 프로시저가 똑같은 것은 아니다.

 

 

프로시저

일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이며, 일련의 작업을 정리한 절차이다.

보통 단독으로 실행해야 할 작업을 위임받았을때 사용한다.

 

코드

CREATE OR REPLACE PROCEDURE 프로시저 이름 ( 
	매개변수명1 [ IN || OUT || INOUT ] 데이터타입
	, 매개변수명2 [ IN || OUT || INOUT ] 데이터타입 ... 
) IS||AS 변수, 상수 등 선언 ( 선언부 ) 
BEGIN 실행 문장 ( 실행부 ) 
EXCEPTION 문장 //필수아님 
END ;

 

호출방법

CALL 프로시저명(IN파라미터명, @OUT파라미터명)
EXECUTE 프로시저명(IN파라미터명, @OUT파라미터명)

 

 

함수

하나의 특별한 목적의 작업을 수행하기 위해 독립적으로 설계된 코드의 집합.

보통 로직을 도와주는 역할이며 간단한 계산, 수치 등을 나타낼 때 사용된다.

 

코드

CREATE OR REPLACE FUNCTION 함수 이름
     ( 매개변수명1 매개변수1타입,
       매개변수명2 매개변수2타입 ... )
  RETURN 데이터타입
  IS||AS
         변수, 상수 등 선언 ( 선언부 )
  BEGIN
         실행 문장 ( 실행부 )
         RETURN 반환값    //필수
         EXCEPTION 문장   //필수아님
  END ;

 

호출방법

SELECT 함수명(IN 파라미터명) FROM DUAL;

 

즉, 함수가 여러 작업을 위한 기능이라면 프로시저는 작업을 정리한 절차입니다.

 

 

매개변수

프로시저

매개변수를 입력, 출력, 입출력 형식으로 받을 수 있다.

 

함수

매개변수를 입력 형식으로만 받을 수 있다.

 

 

반환값

프로시저

반환값을 가질 수도 있고 가지지 않을 수도 있다.

 

함수

반환값을 반드시 가져야 한다.

 

 

쿼리문 내 실행가능 여부

프로시저

SELECT, WHERE 문 등에서 사용이 불가하다.

 

함수

SELECT, WHERE 문 등에서 사용이 가능하다.

 

 

처리장소

프로시저

클라이언트(화면)에서 값을 건네받아 서버에서 작업을 한 뒤 클라이언트에게 전달한다.

즉, 서버에서 실행이 되어 속도면에서 빠른 성능을 보여준다.

 

함수

클라이언트(화면)에서 값을 건네 받고 서버에서 필요한 값을 가져와서 클라이언트에서 작업을 하고 반환한다.

즉, 클라이언트(화면)에서 실행되어 프로시저보단 속도가 느리다.

 

반응형