trigger 작성 0 1 1,433

by dongfa [PL/SQL] [2022.06.06 10:20:26]


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를 작성했는데 조건에 맞게 데이터가 추가되거나 추가 되지 않기는 하지만 예외 처리 되었을때의 메시지는 발생하지 않습니다. 혹시 어느 부분이 잘못된건지 아시는 분은 도움주시면 감사하겠습니다.

by 마농 [2022.06.06 22:14:21]

1. 예상대로 동작한다면? 문제 없어 보입니다.
- result 변수에는 정상적으로 텍스트가 저장되어 리턴되었을 것 같습니다.
- result 변수 리턴값은 확인해 보셨나요?
2. "메시지가 발생하지 않는다" 가 어떤 현상일까요?
- 알림 메시지 출력이 필요하다면? DBMS_output.put_line 을 해주면 될 것 같고
- 오류 메시지 출력이 필요하다면? RAISE_APPLICATION_ERROR 를 해주면 될 것 같습니다.
3. 제목은 바꾸셔야 할 것 같습니다.
- trigger 아니고 procedure

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입