MariaDB에서 프로시저를 처음 만들어봤는데,
그 방법을 정리.
다른 방법도 많이 있지만 지금 내가 만든 프로시저로 내가 원하는 결과 값은 얻을 수 있었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | DROP PROCEDURE IF EXISTS check_insert; /* 기존에 프로시저가 존재하면 DROP */ CREATE PROCEDURE `check_insert`(IN in_pk_seq int(11) /* 받아야할 파라미터 */ , IN in_detail_seq int(11) , IN in_group_num varchar(32) , IN in_company_num varchar(32) , IN in_department_num varchar(32) , IN in_employee_num varchar(32) , IN in_check_time int(5) , IN in_request_date int(10) ) BEGIN /* 프로시저 로직 시작 */ DECLARE over_time int(11); /* DECLARE는 프로시저 안에서 사용할 변수를 생성한다. */ DECLARE deadline int(10); DECLARE exist_same_date int(3); DECLARE result varchar(10) default '성공'; SET over_time = 600 /* SET은 존재하는 변수의 값을 바꿔주거나 대입할 수 있다. */ SET deadline = 20180305; SET exist_same_date = (SELECT count(requestWorkTime.request_day) FROM request_work_time requestWorkTime WHERE requestWorkTime.group_num = in_group_num AND requestWorkTime.company_num = in_company_num AND requestWorkTime.department_num = in_department_num AND requestWorkTime.employee_num = in_employee_seq AND requestWorkTime.request_date = in_reqeust_date); /* 쿼리의 결과 값도 넣어줄 수 있다. */ IF in_check_time > over_time /* IF문과 ELSEIF문은 다음과 같이 사용한다. */ THEN SET result = '시간초과'; /* 근무한 시간이 600분을 넘겼을 때 */ ELSEIF in_request_date > deadline THEN SET result = '마감'; /* 신청일자가 마감기한을 넘겼을 때 */ ELSEIF exist_same_date != 0 THEN SET result = '중복'; /* 신청한 날짜가 이미 DB에 있을 때 */ END IF; IF result = '성공' THEN /* 이상없을 경우 정상 실행 */ INSERT INTO request_work_time(pk_seq, detail_seq, group_num, company_num, department_num, employee_num, check_time, request_date) VALUES (in_pk_seq, in_detail_seq, in_group_num, in_company_num, in_department_num, in_employee_num, in_check_time, in_request_date); END IF; SELECT result; /* 이 프로시저를 실행할 경우 select된 result 값이 리턴된다. */ END; | cs |
* DROP PROCEDURE IF EXISTS 프로시저명 : 기존에 프로시저가 존재한다면 DROP 시킨다.
* CREATE PROCEDURE '프로시저명' (IN 들어올 파라미터명과 타입, OUT 나갈 파라미터명과 타입): 프로시저명에 맞는 프로시저 생성.
* BEGIN (로직) END : 프로시저가 타면서 일어날 로직의 시작과 끝.
* DECLARE 사용할 변수명 변수타입 default (디폴트로 설정할 값): 자바에서 쓰는 변수처럼 프로시저 안에서 사용할 변수를 선언.
* SET (DECLARE에서 선언한 변수) = 대입할 값: 원하는 값으로 세팅한다.
* IF (조건값) THEN (조건에 맞을 경우 실행될 로직) END IF : IF문 문법
* ELSEIF : ELSE IF 문법
마지막에 실행된 쿼리가 동작하면서 result값이 select되서 반환된다.