Database

Procedure

비번변경 2021. 9. 16. 19:27
프로시저; Procedure
일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합
Stored Procedure라고도 불린다.
MySQL의 경우, 5.0 이후 표준 규격 지원

 

장점

  • 하나의 요청으로 여러 SQL 실행 가능 → 네트워크 부하 ⬇️
  • 응용 프로그램 로직 없이 데이터베이스의 참조 무결성 유지 가능
  • 처리 시간 ⬇️, 보수성 ⬆️
  • 쿼리문 보호, SQL Injection 보호, 권한 제어(특정 프로시저에만 접근 가능한 권한 부여)
  • 일괄 작업에 유용, 절차적 기능 및 동적 쿼리 가능

 

단점

  • 재사용성 ⬇️, 디버깅 및 유지보수에 어려움

 

형식

실질적으로 프로시저를 정의하는 부분은 create부터 end까지의 부분이다.

DROP PROCEDURE IF EXISTS procedure_name; -- 이미 프로시저가 정의되어 있다면 삭제 
DELIMITER // --//대신 다른 문자로 대체 가능 
CREATE PROCEDURE procedure_name 
([ 
	[ IN | OUT ] parameter_name { parameter_type | ARRAY OF parameter_type }, ... 
]) -- 매개변수
[ DECLARE variable_declaration;...[;] ] -- 프로시저 내부에서 사용하는 변수 선언
BEGIN procedure_body_statement;...[;] 
END // 
DELIMITER ;
  • DELIMITER '문자'
    문법의 끝을 나타내는 구문 문자를 정의한다.
    프로시저 내의 세미콜론(;)으로 인해 문장 구분이 어렵기 때문에 사용한다.
    기존의 구문 문자인 세미콜론을 만나도 쿼리가 실행되지 않게끔 한다.
  • SET
    변수에 값 변경 또는 대입

 

매개변수

  • IN : 매개변수 전달. 테이블 이름을 매개변수로 전달받을 수는 없다.
  • OUT : 호출한 프로그램에 전달
  • INOUT : IN과 OUT 변수 결합. 호출 프로그램이 인수를 전달하고, 프로시저가 수정 후에 호출한 프로그램에 값을 전달한다.

 

조건문

-- IF문
IF
THEN

ELSEIF
THEN

END IF;

-- CASE문
CASE [조건대상]
WHEN [조건값] THEN

ELSE

END CASE;

 

반복문

WHILE [조건] DO
END WHILE;

 

실행 방법

CALL 프로시저 이름(매개변수);

실행 시, 순서는 아래와 같다.

프로시저 호출 → DB Catalog에서 이름을 찾음 → 프로시저 코드 컴파일 → 메모리 영역에 캐시로 저장 → 프로시저 실행

동일한 session에서 같은 프로시저 재호출 시, 기존에 있는 캐시로 실행된다.

728x90