-- 교육생이 중도 탈락하면 상담 기록 자동 삭제
CREATE OR REPLACE TRIGGER trg_delete_counsel_on_dropout
AFTER UPDATE ON tblJoinStudentManage
FOR EACH ROW
BEGIN
IF :NEW.join_status = '중도 탈락' THEN
DELETE FROM tblCounsel WHERE student_seq = :NEW.student_seq;
END IF;
END;
/
잘못된 배점이 입력되지 않도록 트리거를 추가합니다.
-- 잘못된 배점인지 확인하는 트리거
CREATE OR REPLACE TRIGGER TRG_VALIDATE_SCALE
BEFORE INSERT OR UPDATE ON tblScale
FOR EACH ROW
DECLARE
v_total NUMBER;
BEGIN
v_total := :NEW.scale_attend + :NEW.scale_written + :NEW.scale_practice;
IF :NEW.scale_attend < 20 THEN
RAISE_APPLICATION_ERROR(-20004, '출결 배점은 최소 20점 이상이어야 합니다.');
END IF;
IF v_total <> 100 THEN
RAISE_APPLICATION_ERROR(-20005, '출결, 필기, 실기의 합이 100점이 되어야 합니다.');
END IF;
END;
/
-- 중도 탈락한 학생 성적 입력을 방지
CREATE OR REPLACE TRIGGER TRG_VALIDATE_SCORE
BEFORE INSERT OR UPDATE ON tblScore
FOR EACH ROW
DECLARE
v_complete_date DATE;
BEGIN
SELECT complete_date INTO v_complete_date
FROM tblJoinStudentManage
WHERE student_seq = :NEW.student_seq
AND course_seq = (SELECT course_seq FROM tblCourseSubjectManage WHERE subject_seq = :NEW.subject_seq);
IF v_complete_date IS NOT NULL AND v_complete_date < SYSDATE THEN
RAISE_APPLICATION_ERROR(-20007, '중도 탈락한 교육생의 성적을 탈락 이후에는 입력할 수 없습니다.');
END IF;
END;
/
-- 평가점수 유효성 트리거
CREATE OR REPLACE TRIGGER TRG_VALIDATE_EVALUATION_SCORE
BEFORE INSERT OR UPDATE ON tblEvaluation
FOR EACH ROW
BEGIN
-- 평가 점수가 1에서 5 사이인지 확인
IF :NEW.evaluation_score < 1 OR :NEW.evaluation_score > 5 THEN
RAISE_APPLICATION_ERROR(-20024, '평가 점수는 1에서 5 사이여야 합니다.');
END IF;
END;
/
CREATE OR REPLACE TRIGGER TRG_DUPLICATE_COUNSEL
BEFORE INSERT ON tblCounsel
FOR EACH ROW
DECLARE
v_count NUMBER;
BEGIN
-- 동일한 학생이 같은 날짜에 중복 상담이 등록되지 않도록 방지
SELECT COUNT(*)
INTO v_count
FROM tblCounsel
WHERE student_seq = :NEW.student_seq
AND counsel_date = :NEW.counsel_date;
IF v_count > 0 THEN
RAISE_APPLICATION_ERROR(-20011, '같은 날짜에 동일한 학생의 상담 기록이 이미 존재합니다.');
END IF;
END;
/
CREATE OR REPLACE TRIGGER TRG_VALIDATE_EVALUATION_SCORE
BEFORE INSERT OR UPDATE ON tblEvaluation
FOR EACH ROW
BEGIN
-- 평가 점수가 0에서 100 사이인지 확인
IF :NEW.evaluation_score < 1 OR :NEW.evaluation_score > 5 THEN
RAISE_APPLICATION_ERROR(-20024, '평가 점수는 0에서 100 사이여야 합니다.');
END IF;
END;
/