스토어드 프로시저는 MYSQL에서 프로그래밍 기능이 필요할 때 사용하는 DB 개체이다.
SQL 프로그래밍은 기본적으로 프로시저 안에 만들어야 한다.
기본 구조는 아래와 같다.
DELIMITER $$
CREATE PROCEDURE
BEGIN
SQL 코딩
END $$
DELIMITER ;
CALL 프로시저 이름
IF <조건식> THEN
SQL 문장
END IF;
기본 문장에 대해서 IF문 뒤에 ELSE 구문을 추가하면 된다.
DELIMITER $$
CREATE PROCEDURE IFPROC()
BEGIN
DECLARE DATE DATE;
DECLARE CURDATE DATE;
DECLARE DAYS INT;
SELECT DATE INTO DATE
FROM MEMBER
WHERE ID = 'ASD';
SET CURDATE = CURRENT_DATE();
SET DAYS = DATEDIFF(CURDATE, DATE);
IF (DAYS/365) >= 5 THEN
SELECT CONCAT('장기 근속', DAYS, '일 경과')
ELSE
SELECT '장기 근속 아님'
END IF;
END $$
DELIMITER ;
CALL IFPROC();
위 예시의 경우에서
1. DECLARE로 변수 준비
2. SELECT 과정에서 INTO 변수
3. CURRENT_DATE로 현재 날짜를 저장
4. DATEDIFF() 를 이용해서 DATE와 CURDATE의 차를 DAYS에 저장
5. 년도 체크
순으로 진행된다.
IF는 2가지만 있기 때문에 '2중 분기'라고도 부르는데 반해 CASE는 여러 분기를 가지는 경우에 처리가 가능하므로 '다중 분기'라고 부른다.
기본 형식은 아래와 같다.
CASE
WHEN 조건1 THEN
SQL
WHEN 조건2 THEN
SQL
WHEN 조건3 THEN
SQL
WHEN 조건4 THEN
SQL
ELSE
SQL
END CASE;
WHILE 조건식 DO
SQL
END WHILE;
WHILE은 조건이 참인 동안 반복하기 때문에 단순하지만 중간에 조건이 추가되기 위해서는 아래 두 구문을 이용해야한다.
PREPARE는 SQL문을 실행하지는 않고 미리 준비만 하는 구문이며, EXECUTE는 준비한 SQL을 실행하는 구문이다.
또한 실행 후 DEALLOCATE PREFARE로 문장을 해제해주는 것이 좋다.
단순 예제는 아래와 같다.
PREPARE QUE FROM 'SELECT * FROM MEMBER WHERE ID = "ASD"';
EXECUTE QUE;
DEALLOCATE PREPARE QUE;