강사의 일원으로 '전체'등급의 교수를 2 명 이상 허용하지 않는 트리거를 작성했습니다 (예 : 새로운 (세 번째) 전체 교수가 추가되거나 트리거되면 트리거해야 함) 기존의 Associate 교수 중 한 명에게 Full로 업데이트됩니다.)트리거가 삽입을 허용하지 않습니다
컴파일은되지만 내 테이블에 데이터를 추가하는 것을 알려주지 않습니다. 한 번만 사용하면됩니다. 이에 대한 진술 수준 트리거를 사용합니까? 또한 현재로서는 Full이나 Associate인지 여부에 관계없이 Rank 교수를 업데이트하거나 삽입하지 않습니다. 어떻게 수정하겠습니까?
나는 또한 이전과 이후에 비교 논리가 잘못되었다는 말을 들었습니다. 도와주세요!
CREATE OR REPLACE TRIGGER TRG_PROF_RANK
after insert or update of F_RANK
on FACULTY
DECLARE
FULL_RANK_COUNT integer;
MAX_FULL_RANK_COUNT number :=2;
begin
select count(*) into FULL_RANK_COUNT
from FACULTY
where F_RANK ='Full';
if FULL_RANK_COUNT < MAX_FULL_RANK_COUNT
then
return;
else
if (FULL_RANK_COUNT >= MAX_FULL_RANK_COUNT) then
RAISE_APPLICATION_ERROR (-20000, 'Can only have 2 professors with ranking "Full".');
end if;
end if;
end;
/
나는 다음과 같은 문으로 테스트 : 여기
트리거입니다insert into FACULTY values(6, 'John', 'Bonny', 'M', 13, '4079347153', 'Associate', 80000, 2, 6034, Null);
을하지만 그것은 나를 테이블에있는 레코드를 삽입 할 수 없습니다.
Error starting at line : 240 in command -
insert into FACULTY values(6, 'John', 'Bonny', 'M', 13, '4079347153', 'Associate', 80000, 2, 6034, Null)
Error report -
SQL Error: ORA-20000: Can only have 2 professors with ranking "Full".
ORA-06512: at "IT337104.TRG_PROF_RANK", line 16
ORA-04088: error during execution of trigger 'IT337104.TRG_PROF_RANK'
20000. 00000 - "%s"
*Cause: The stored procedure 'raise_application_error'
was called which causes this error to be generated.
*Action: Correct the problem as described in the error message or contact
the application administrator or DBA for more information.
난 그냥 내가 데이터를 삽입 할 수 있는지 확인하기 위해, 도와주세요 : 그리고 이것은 내가 오류입니다.
는 트리거가 전혀 실행하지 말아야 있도록
'> ='당신이 필요로하는 곳은'>'입니다. 또한 이미 테이블에 2 명 이상의 전체 교수가있을 수 있습니다. 삽입 된 교수가 가득 차 있지 않은 경우에도 조건이 실행됩니다. 'references as new as'절 (또는 Oracle SQL의 동급)을 사용하고 새로 삽입 된 레코드가 '전체'교수인지 여부를 확인할 수 있습니다. Full에서 Associate 로의 변경은 항상 유효해야합니다 (이 트리거에 따르면, 다른 트리거는 항상 열성적인 교수가 적어도 한 명 있다고 주장 할 수 있지만, 아마도 과도하게 열심입니다). –