Ты действительно не слишком далеко. Вы правильно видели, что триггер может , а не быть триггером строки, так как вам нужно будет запросить таблицу, для которой определен триггер. Я предлагаю следующее:
create or replace TRIGGER TRG_ONLYTWOPROF
AFTER INSERT OR UPDATE OF F_RANK ON FACULTY
DECLARE
TOTAL NUMBER(4);
BEGIN
SELECT COUNT(*)
INTO TOTAL
FROM FACULTY
WHERE F_RANK = 'Full';
IF TOTAL > 2 THEN
RAISE_APPLICATION_ERROR(-20001, 'Failure in trigger TR_ONLYTWOPROF: two professors with RANK=''Full'' already exist');
END IF;
END TRG_ONLYTWOPROF;
Определяет триггер оператора, который будет запускать после , когда произошла INSERT или UPDATE. Одна из проблем заключается в том, что триггер оператора не может видеть значения строк, поэтому вы не можете пропустить проверку, если новая строка имеет F_RANK, отличный от 'Full'. Не должно иметь большого значения, но должно иметь в виду. Другая причина в том, что, поскольку вы не можете видеть значения строк, вам необходимо выполнить проверку после , когда оператор вступил в силу, чтобы вы могли правильно вызвать исключение.
Удачи.