MySQL function을 이용해 직원 출석등록 함수를 만들어보겠다.
1. 테이블 생성하기
1 2 3 4 5 6 7 | CREATE TABLE `EMP_ATTEND` ( `ATTEND_YMD` VARCHAR(8) NOT NULL COLLATE 'utf8_bin', `EMP_NO` VARCHAR(9) NOT NULL COLLATE 'utf8_bin' ) COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB; | cs |
간단하게 직원출석 테이블을 생성한다.
2. 함수 생성하기
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 | DELIMITER $$ DROP FUNCTION IF EXISTS FNC_ATTEND; CREATE FUNCTION FNC_ATTEND(attendType VARCHAR(10), empNo VARCHAR(10)) RETURNS BOOL BEGIN DECLARE exist_flag INT; DECLARE returnVal BOOL; SET returnVal = FALSE; -- 출석 등록 IF 'attend'= attendType THEN SELECT COUNT(1) INTO exist_flag FROM EMP_ATTEND WHERE EMP_NO = empNo AND ATTEND_YMD = DATE_FORMAT(NOW(), '%Y%m%d') ; IF exist_flag = 0 THEN INSERT INTO EMP_ATTEND( ATTEND_YMD , EMP_NO )VALUES( DATE_FORMAT(NOW(), '%Y%m%d') , empNo ); SET returnVal = TRUE; END IF; END IF; RETURN returnVal; END $$ DELIMITER ; | cs |
function의 argument 2개를 지정해 생성하고 return 값은 boolean으로 받겠다.
만약 arg로 들어온 첫번째 값이 문자열 'attend' 일경우
테이블에 해당 직원의 오늘날짜로 출석한 데이터가 있는지 확인하고
데이터가 없다면 오늘날짜와 직원번호로 값을 insert한다.
값이 insert 된 후 returnVal의 값은 TRUE가 된다.
3. 함수 호출하기
1 2 3 4 | -- if return value 0 then false -- else if return value 1 then true SELECT FNC_ATTEND('attend', '1000'); | cs |
함수를 생성하고 위와 같이 호출을 해본다.
2개 파람값을 넣고 호출하면 1이나 0이 나오게 된다.
0이 나오면 false, 1이 나오면 true이다.
4. 테이블 조회하기
1 | SELECT * FROM EMP_ATTEND; | cs |
직원출석 테이블을 조회하면 값이 잘 들어간 것을 확인할 수 있다.
EMP_NO 하나당 하루에 한번 출석등록을 할 수 있는 function을 만들어보았다.
'전체 > MySQL' 카테고리의 다른 글
MySQL 프로시저 생성 (테이블 백업) 및 이벤트 스케쥴러 등록,삭제 (1) | 2019.07.30 |
---|---|
select return (0 row 0 total rows) null 결과 출력처리방법 (0) | 2019.07.19 |
MySQL 계층형 쿼리 구현하기 (13) | 2019.07.16 |
SQL EXPLAIN 정리 (0) | 2018.11.19 |
ANSI Syntax and Conventional syntax(non-ANSI) 안시조인 사용 이유 (0) | 2018.10.29 |