SQL 프로그래밍과 PROCEDUER_basic

dwanGim·2022년 2월 18일
0

mysql_basic

목록 보기
4/4

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);

일단 지금은 여기까지 입니다.

profile
배울 게 참 많네요.

0개의 댓글

관련 채용 정보