MySQL function을 이용해 직원 출석등록 함수를 만들어보겠다.


1. 테이블 생성하기


1
2
3
4
5
6
7
CREATE TABLE `EMP_ATTEND` (
    `ATTEND_YMD` VARCHAR(8NOT NULL COLLATE 'utf8_bin',
    `EMP_NO` VARCHAR(9NOT 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을 만들어보았다.

+ Recent posts