PROCEDUER
-SQL에서도 변수선언이 되었습니다.
그러므로 프로그래밍을 진행할 수 있습니다.
DELIMITER $$
CREATE PROCEDURE
BEGIN
~실행코드...~
END $$
DELIMITER;
위의 문법으로 선언할 수 있고
CALL 프로시저명(); 로 호출 가능합니다.
IF ~ ELSE문을 프로시저로 작성해보겠습니다.
DELIMITER $$
CREATE PROCEDURE ifProc()
BEGIN
DECLARE var1 INT; -- 변수 선언
SET var1 = 2000; -- 선언한 변수에 값 저장
IF var1 = 100 THEN -- IF문 선언
SELECT '100이 맞습니다.';
ELSE
SELECT '100이 아닙니다.';
END IF; -- IF문 종료지점
END $$
DELIMITER ;
CALL ifProc();
프로시저 내용을 바꾸고싶으면 프로시저를 먼저 삭제해준 다음
구문을 고치고 다시 선언해줘야 합니다.
DROP PROCEDURE ifProc;
DROP PROCEDURE 프로시저명;
으로 프로시저를 삭제합니다.
프로시저명 우측의 () 는 적지 않습니다.
테이블 employees를 조회하는 프로시저를 만들어보고
호출하겠습니다.
DELIMITER $$
CREATE PROCEDURE getEmp()
BEGIN
SELECT * FROM employees;
END;
END $$
DELIMITER ;
call getEmp();
이번엔 employees 테이블의 10001번 직원의
입사일이 5년 넘었는지 여부를 체크해보겠습니다.
CREATE PROCEDURE checkFiveYear()
BEGIN
DECLARE hireDATE DATE; # 입사일을 얻어오기 위해 DATE 자료형 변수 선언
DECLARE todayDATE DATE; # 오늘 날짜 얻어오기
DECLARE days INT; # 오늘날짜 - 입사일 해서 경과일수 얻어오기
# 10001번 직원의 hire_date를 조회하는 쿼리문을 먼저 작성해보세요.
SELECT hire_date INTO hireDATE
FROM employees WHERE emp_no = 10003;
# 위 쿼리문의 결과로 나온 10001번 직원의 hire_date값을 hireDATE 변수에 저장하기 위해
# INTO 키워드를 씁니다.
SET todayDATE = CURRENT_DATE(); # 오늘 날짜를 구하는 기능
SET days = DATEDIFF(todayDATE, hireDATE); # todayDATE - hireDATE를 수행
# 경과일수가 5년을 넘었는지 체크하기
IF(days / 365) >= 5 THEN #입사경과일을 365로 나눈 값이 5보다 크면 5년 이상
SELECT CONCAT('입사한지', days, '일이 경과했습니다.');
# 아닌 경우는 '5년미만이고 days 일째 근무중' 이라고 나오게 한 다음 구문을 종료시켜주세요.
ELSE
SELECT CONCAT('5년미만이고, ', days, '일째 근무중.');
END IF;
END $$
DELIMITER ;
call checkFiveYear();
주석이 달린 대로 이해하고 적용하면 어렵지 않습니다.
더욱 심화하여 employees테이블의 어느 근로자든
입사한 지 5년이 지났는지 확인해보는 프로시저를 만들어보겠습니다.
이 프로시저는
checkFiveYear2 ()의 괄호 안에 emp_number INTEGER를 선언해
정수를 입력받게 해보겠습니다.
CREATE PROCEDURE checkFiveYear2(emp_number INTEGER) # 매번 프로시저를 수정하지 않아도 되게 매개변수를 선언합시다.
BEGIN
DECLARE hireDATE DATE;
DECLARE todayDATE DATE; #
DECLARE days INT;
SELECT hire_date INTO hireDATE
FROM employees WHERE emp_no = emp_number; # 그리고 매개변수를 적용해주면 됩니다.
SET todayDate = CURRENT_DATE();
SET days = DATEDIFF(todayDATE, hireDATE);
IF (days / 365) >= 5 THEN
SELECT CONCAT(emp_number, '번 사원은 입사한 지', days, '일이 경과했습니다.');
ELSE
SELECT CONCAT('입사한지 5년 미만입니다. ', days, '일째 근무 중');
END IF;
END $$
DELIMITER $$
call checkFiveYear2(19999);
call checkFiveYear2(20000);
일단 지금은 여기까지 입니다.