MySQL

[MySQL] 프로시저(Procedure) 사용법

DSeung 2020. 12. 22. 15:45

1. 프로시저란

MySQL에서 함수를 정의하는 것이라고 보시면 편합니다, 함수처럼 매개변수를 받고 그에 따라 다른 결과를 나타내는 것이 가능합니다, 프로시저는 SQL 명령의 묶음이라고 볼 수 있고 프로시저로 묶인 SQL문 질의들은 처리될 때 하나의 쿼리로 해석되어 처리합니다.

 

즉 프로시저는 복수의 쿼리를 실행하는데 있어서 중간 쿼리들의 오류를 방지하기 위해 일괄 처리하는 명령어입니다.

 

부연 설명으로 프로시저는 MySQL에서 절차적인 처리를 위해 만든 Storead Procedure에 포함되는 기능입니다.

Storead Procedure 에서는 DB에서 사용할 수 없던 제어문이 사용이 가능합니다, 이에 포함되는 것은 프로시저 말고도 함수, 트리거 등이 있습니다.

 

특징 

- 하나의 쿼리로 해석하여 처리하기에 데이터 처리 속도가 빠르다

- 한 번의 요청으로 여러 SQL문을 실행시킬 수 있다, 그로 인해 외부 PC의 DB 일 경우 네트워크 부하를 줄일 수 있음

- MySQL은 아직 Storead Procedure 의 성능이 타 프로그램에 비해 부족합니다.(프로시저도 마찬가지)

- 프로시저 기능을 통해 코드의 조각화를 할 수 있습니다, java나 php에서 하던 일을 MySQL에서 처리하는 것입니다.

 

 

2. 프로시저 등록

기본적인 형태는 아래와 같습니다.

DELIMITER //
CREATE PROCEDURE mem()
BEGIN
	select * from members;
END
//
DELIMITER ;

 

"DELIMITER //" 을 선언해서 기존 구분 문자인 ";" 에서 "//"로 바꿔줍니다.

 

아래 형식으로 프로시저를 등록할 수 있습니다.

CREATE PROCEDURE 프로시저명(매개변수)

BEGIN 

           SQL 문1;

           SQL 문2;

END

 

프로시저 등록을 마친 후

"DELIMITER ;"을 통해 다시 구분 무자를 ";"으로 바꿔줍니다.

이 작업을 하지 않을 경우 프로시저 등록하는 과정에서 ;으로 인해 에러가 발생합니다.

 

프로시저 사용법과 삭제법은 아래와 같습니다.

call mem;
DROP PROCEDURE mem;

위에서 프로시저을 생성할 때 매개변수가 있었는데요.

아래와 같이 매개변수를 사용할 수 있습니다.

매개변수를 사용하려면 call에서 매개변수를 보내면 되겠죠.

DELIMITER //
CREATE PROCEDURE mem(a INT)
BEGIN
	SELECT * FROM members WHERE ID = a;
END //
DELIMITER ;
CALL mem(2);

마지막으로 아래 명령문으로 만들어진 프로시저의 내용을 확인할 수 있습니다.

반응형