인사관리 시스템의 ‘사원’, ‘퇴사예정’ 테이블에 대하여 다음 요구사항… | [7급 국가직 데이터베이스론] 26년 1회차 기출문제 상세 페이지
1[7급 국가직 데이터베이스론] 26년 1회차
인사관리 시스템의 ‘사원’, ‘퇴사예정’ 테이블에 대하여 다음 요구사항을 반영하여 적절하게 구현한 트리거 생성문은? (단, 모든 SQL 문은 정상적으로 수행되며, old, new는 변경 전후 투플 지정자를 의미한다)○ ‘사원’ 테이블에서 어떤 사원의 ‘재직상태’가 “퇴사예정”으로 값이 변경되면, 해당 사원의 투플이 ‘퇴사예정’ 테이블에 추가된다.
○ ‘퇴사예정’ 테이블의 속성은 ‘사원번호’와 ‘이름’이며, 이 정보는 ‘사원’ 테이블에도 포함되어 있다.
1
CREATE TRIGGER Employee_Trigger
BEFORE UPDATE ON 사원 FOR EACH ROW
BEGIN
IF old.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
2
CREATE TRIGGER Employee_Trigger
AFTER UPDATE ON 사원 FOR EACH ROW
BEGIN
IF new.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
3
CREATE TRIGGER Employee_Trigger
BEFORE INSERT ON 사원 FOR EACH ROW
BEGIN
IF old.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
4
CREATE TRIGGER Employee_Trigger
AFTER INSERT ON 사원 FOR EACH ROW
BEGIN
IF new.재직상태 = “퇴사예정” THEN
INSERT INTO 퇴사예정 VALUES(old.사원번호, old.이름);
END IF;
END;
해설
값이 바뀐 뒤 new.재직상태가 “퇴사예정”인지 검사하는 AFTER UPDATE 트리거가 요구사항에 맞다.
재직상태 변경은 UPDATE 사건이고 변경 후 값은 new로 참조해야 한다. 사원번호·이름은 변경 대상이 아니므로 old로 읽어도 같은 값이 삽입된다.
- BEFORE UPDATE에서 old.재직상태를 검사하는 트리거는 이미 퇴사예정이던 사원이 수정될 때 동작하고, 새로 퇴사예정으로 바뀌는 경우는 잡지 못한다.
- BEFORE INSERT 트리거는 값 변경이 아닌 신규 삽입에 반응하며, 삽입에는 변경 전 투플(old)이 없다.
- AFTER INSERT 트리거도 신규 삽입에만 반응하므로 재직상태 변경을 감지하지 못하고, old 투플도 존재하지 않는다.
오류나 개정된 내용이 보이면 알려주세요