[mySQL] 프로시저 만들기(DECLARE, SET, IN, IF, ELSEIF 등)
작성일 20-08-10 11:32
페이지 정보
작성자서방님 조회 560회 댓글 0건본문
MariaDB에서 프로시저를 처음 만들어봤는데,
그 방법을 정리.
다른 방법도 많이 있지만 지금 내가 만든 프로시저로 내가 원하는 결과 값은 얻을 수 있었다.
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;
* 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되서 반환된다.
관련링크
- https://zorba91.tistory.com/29 221회 연결
댓글목록
등록된 댓글이 없습니다.
