
스토어드 프로시저는 MySQL에서 프로그래밍 기능이 필요할 때 사용하는 데이터베이스 개체.SQL 프로그래밍은 기본적으로 스토어드 프로시저 안에 만들어야 함.스토어드 프로시저의 구조
DELIMITER $$
CREATE PROCEDURE 스토어드 프로시저 이름()
BEGIN
-- SQL 프로그래밍 코딩
END $$
DELIMITER ;
CALL 스토어드 프로시저 이름();
스토어드 프로시저는 DELIMITER $$ ... END $$ 안에 작성하고 CALL로 호출.IF문은 조건문으로 가장 많이 사용되는 프로그래밍 문법 중 하나.IF문은 조건식이 참이라면 SQL문장들을 실행, 그렇지 않으면 생략하고 넘어감.IF문의 형식
IF <조건식> THEN
-- SQL 문장들
END IF;
SQL문장들이 한 문장이라면 해당 문장만 쓰면 됨.BEGIN ... END로 묶어줘야 함.세미콜론(;)으로는 SQL의 끝인지, 스토어드 프로시저의 끝인지 구별할 수 없어서 $$를 사용.=을 사용.IF ~ ELSE문은 조건에 따라 다른 부분을 수행함.IF문 수행, 거짓일 경우 ELSE문 수행.DECLARE 예약어를 사용해서 변수를 선언할 수 있음.DECLARE myNum INT;변수 선언, 데이터 형식은 INT로 지정.SET 예약어로 변수에 값을 대입할 수 있음.SET myNum = 200;SELECT문에 INTO가 붙을 경우 결과를 변수에 저장함.SELECT debut_date INTO debutDatedebutDate에 저장됨.CURRENT_DATE() : 오늘 날짜를 알려줌.CURRENT_TIMESTAMP : 오늘 날짜 및 시간을 함께 알려줌.DATEDIFF(날짜1, 날짜2) : 날짜2로부터 날짜1까지 일수로 몇일인지 알려줌.CASE문을 사용해서 조건을 설정할 수 있음.IF문은 참 아니면 거짓 두 가지만 있기 때문에 2중 분기라는 용어를 사용함.CASE문은 2가지 이상의 여러 가지 경우일 때 처리가 가능하므로 다중 분기라고 부름.CASE문의 형식
CASE
WHEN 조건1 THEN
SQL 문장들 1
WHEN 조건2 THEN
SQL 문장들 2
WHEN 조건3 THEN
SQL 문장들 3
ELSE
SQL 문장들 4
END CASE;
SELECT절에서 FROM절 앞에 사용.CASE와 END CASE사이에는 여러 조건을 넣을 수 있음.WHEN 다음에 조건이 나오는 데 조건이 여러개라면 WHEN을 여러 번 반복함.WHILE문은 필요한 만큼 계속 같은 내용을 반복할 수 있음.WHILE 문은 조건식이 참인 동안에 SQL문장들을 계속 반복함.WHILE문의 형식
WHILE <조건식> DO
SQL 문장들
END WHILE;
ITERATE[레이블] : 지정한 레이블로 가서 계속 진행.continue와 비슷함.LEAVE[레이블] : 지정한 레이블을 빠져나감. WHILE문이 종료.break와 비슷함.ITERATE는 반복문을 계속 진행하고, LEAVE는 반복문을 빠져나감.SQL문은 내용이 고정되어 있는 경우가 대부분.동적 SQL을 사용하면 변경되는 내용을 실시간으로 적용시켜 사용할 수 있음.PREPARE는 SQL문을 실행하지는 않고 미리 준비만 해놓고, EXECUTE는 준비한 SQL문을 실행함.DEALLOCATE PREPARE로 문장을 해제해주는 것이 바람직함.PREPARE, EXECUTE로 동적 SQL문을 만들 수 있음.PREPARE문에서는 ?로 향후에 입력될 값을 비워놓고, EXECUTE에서 USING으로 ?에 값을 전달할 수 있음.Ex 출입한 내역을 테이블에 기록.INSERT문으로 만들어져 입력되도록.CREATE TABLE gate_table (id INT AUTO_INCREMENT PRIMARY KEY, entry_time DATETIME);
SET @curDate = CURRENT_TIMESTAMP(); -- <현재 날짜와 시간을 @curDate변수에 넣음.>
PREPARE myQuery FROM 'INSERT INTO gate_table VALUES(NULL, ?)'; -- <?를 사용해서 entry_time에 입력할 값을 비워놓음.>
EXECUTE myQuery USING @curDate; -- <USING 문으로 앞에서 준비한 @curDate 변수를 넣은 후에 실행됨.>
DEALLOCATE PREPARE myQuery;
SQL에서 변수는 @변수명으로 지정하는 데 별도의 선언은 없어도 됨.스토어드 프로시저에서 변수는 DECLARE로 선언한 후에 사용.