-
[mySQL] 프로시저 만들기(DECLARE, SET, IN, IF, ELSEIF 등)DataBase/MariaDB & MySQL 2018. 3. 5. 19:55
MariaDB에서 프로시저를 처음 만들어봤는데,
그 방법을 정리.
다른 방법도 많이 있지만 지금 내가 만든 프로시저로 내가 원하는 결과 값은 얻을 수 있었다.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647DROP 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 requestWorkTimeWHERE requestWorkTime.group_num = in_group_numAND requestWorkTime.company_num = in_company_numAND requestWorkTime.department_num = in_department_numAND requestWorkTime.employee_num = in_employee_seqAND requestWorkTime.request_date = in_reqeust_date); /* 쿼리의 결과 값도 넣어줄 수 있다. */IF in_check_time > over_time /* IF문과 ELSEIF문은 다음과 같이 사용한다. */THEN SET result = '시간초과'; /* 근무한 시간이 600분을 넘겼을 때 */ELSEIF in_request_date > deadlineTHEN SET result = '마감'; /* 신청일자가 마감기한을 넘겼을 때 */ELSEIF exist_same_date != 0THEN 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되서 반환된다.
'DataBase > MariaDB & MySQL' 카테고리의 다른 글
Transaction과 MySQL의 MyISAM 엔진(JUnit 테스트 중에 깨달은 사실) (0) 2018.04.17 [MySQL] '같지 않다' 조건 연산자 (0) 2018.03.07 Mybatis에서 동적 쿼리 사용을 위해 컬럼명 글자(문자열X) 그대로 넣는 법 (0) 2018.01.28 MariaDB 접속 방법과 데이터베이스, 사용자 계정 생성 (0) 2017.09.23 MariaDB 설치하는 방법 for Mac (0) 2017.09.23