• 저장 프로시저(Stored Procedure)
일련의 작업 절차를 정리해서 저장한 것
여러 SQL문을 묶어서 미리 정의해 두고 하나의 요청으로 실행할 수 있음
자주 사용되는 복잡한 작업들을 간단하게 실행 할 수 있음
Application 에서 직접 모든 작업을 요청하지 않아도 되기 때문에 부하가 줄어들고 보안이 향상됨
단, 검증되지 않은 저장 프로시저를 실행하는 것은 매우 위험함
MySQL은 5.0버전부터 사용 가능
• 저장 프로시저 생성
| mysql> DELIMITER // mysql> CREATE PROCEDURE <프로시저 이름>( [ ARGUMENT , ... ] ) BEGIN 실행문 ; 실행문 ; .... END // mysql> DELIMITER ; |
- DELIMITER
저장 프로시저 안에 여러 SQL문이 들어가는데 각 SQL문의 끝을 나타내기 위해 세미콜론( ; )을 입력 해야 함
→ 프로시저를 생성하는 명령이 끝나버리는 문제가 발생
명령의 끝을 나타내는 구분문자를 임시로 변경하여 작성
mysql> DELEMITER <구문문자>
프로시저 작성이 끝난 뒤에는 반드시 구문문자를 다시 변경 해 줘야 함
ARGUMENT(인자값)
프로시저가 실행 될 때 입력 받을 값(프로시저 실행 시 입력해 줌)
형식 : ( 인자이름 데이터형식 [ , ... ] )
BEGIN
저장 프로시저 범위의 시작
END
저장 프로시저 범위의 끝
• 저장 프로시저 확인
프로시저 목록 확인
mysql> SHOW PROCEDURE STATUS ;
특정 프로시저 설정 확인
mysql> SHOW CREATE PROCEDURE <프로시저 이름> ;
• 저장 프로시저 실행
mysql> CALL <프로시저 이름>( ) ;
( ) 는 생략 가능
• 저장 프로시저 삭제
mysql> DROP procedure <프로시저 이름> ;
• 프로시저 내 변수 사용
프로시저 내 지역변수를 선언하여 사용
선언 시 데이터 타입, 기본값 지정 가능
| 변수 선언 DECLARE <변수명> <데이터타입> [ DEFAULT <기본값> ] ; 변수에 데이터 저장 SET <변수명> = <데이터> ; <변수명> := <데이터> 변수 사용 <변수명> |
• 조건문(IF문) 사용
조건에 따라 실행 여부를 결정하는 흐름 제어문
ELSEIF 와 ELSE 는 생략 가능
| IF <조건1> THEN <조건1 만족할 때 실행할 내용; ... > ELSEIF <조건2> THEN <조건2 만족할 때 실행할 내용; ... > ELSE <상위 조건들 모두 만족하지 않을 때 실행할 내용; ... > END IF; |
• 선택문(CASE 문) 사용
조건에 따라 실행 내용을 선택하는 흐름 제어문
WHEN 은 반드시 하나 이상은 있어야 함
ELSE 는 생략 가능
| CASE <변수> WHEN <값1> THEN <변수의 값이 값1과 일치할 때 실행할 내용; ... > WHEN <값2> THEN <변수의 값이 값2과 일치할 때 실행할 내용; ... > ELSE <변수의 값과 일치하는 값이 없을 때 실행할 내용, ... > END CASE; |
• 반복문(WHILE문) 사용
조건의 값이 참인 동안 반복해서 실행하는 흐름 제어문
원하는 횟수만큼 반복하기 위해서 조건을 잘 지정해 줘야 함
| WHILE <조건> DO <조건이 참인 동안 반복 실행할 내용; ... > END WHILE ; |
'Linux > SQL' 카테고리의 다른 글
| [DBMS] 트리거 (Trigger) (0) | 2021.12.08 |
|---|---|
| [DBMS] 저장 함수 (Stored Function) (0) | 2021.12.08 |
| [DBMS] 변수 실습 (0) | 2021.12.08 |
| [DBMS] 변수(Variable) (0) | 2021.12.08 |
| [DBMS] 트랜잭션 Transaction : Autocommit 기능 설정 (0) | 2021.11.30 |