create or replace procedure InsertDept (sCityHallId IN CITYHALL.CITYHALL_ID%TYPE, sDeptId IN DEPARTMENT.DEPT_ID%TYPE, sDeptName IN DEPARTMENT.DEPT_NAME%TYPE, result out varchar2 ) is too_many_sumDeptUnit EXCEPTION; nSumDeptUnit number; nCHID CITYHALL.CITYHALL_ID%TYPE; nBud CITYHALL.BUDGET%TYPE; begin result := ''; DBMS_output.put_line('#'); DBMS_output.put_line('시청코드가 ' || sCityHallId || ' 인시청에 ' || sDeptName || ' 를 추가하겠습니다.'); select c.CITYHALL_ID, count(d.Dept_ID), c.budget into nCHID, nSumDeptUnit, nBud from cityhall c, department d where c.cityhall_id = d.CH_ID and c.CITYHALL_ID = sCityHallId group by c.CITYHALL_ID, c.budget; if(nBud <= 30000000 and nSumDeptUnit >= 2) then RAISE too_many_sumDeptUnit; end if; DBMS_output.put_line('예산 : ' || nBud || '부서 개수 : '|| nSumDeptUnit || '이므로 추가가 가능합니다.'); insert into department (dept_id, dept_name, ch_id) values (sDeptId, sDeptName, sCityHallId); commit; exception when too_many_sumDeptUnit then result := '예산 부족으로 더이상 부서를 추가할 수 없습니다.'; end;
이렇게 예산이 30000000원 이하인데 부서를 3개 이상 추가하려는 시청은 막는 예외처리한 trigger를 작성했는데 조건에 맞게 데이터가 추가되거나 추가 되지 않기는 하지만 예외 처리 되었을때의 메시지는 발생하지 않습니다. 혹시 어느 부분이 잘못된건지 아시는 분은 도움주시면 감사하겠습니다.