No tak ponieważ jeśli zapytanie:
SELECT ID_PORT_BBB INTO wynik_1 FROM PORTY_BBB
WHERE ID_PORT_BBB = :NEW.PORTY_BBB_ID_PORT_BBB
AND STATUS_PORTU_BBB = 'zajety';
nie znajdzie dopasowania to rzuca tak jak pisałem wcześniej NO DATA FOUND.
Musisz opakować to zapytanie w blok BEGIN .... END z łapaniem wyjątków typu NO_DATA_FOUND i TOO_MANY_ROWS.
Czyli coś w stylu:
BEGIN
SELECT ID_PORT_BBB INTO wynik_1 FROM PORTY_BBB
WHERE ID_PORT_BBB = :NEW.PORTY_BBB_ID_PORT_BBB
AND STATUS_PORTU_BBB = 'zajety';
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL; -- Bo jak rozumiem, sytuacja w której nie ma zajętego portu jak aktualnie wstawiany ID to jest ok
WHEN TOO_MANY_ROWS THEN
RAISE_APPLICATION_ERROR(-20001, 'Coś jest nie tak. Mamy więcej niż jeden zajęty port o tym samym ID');
END;
EDIT:
A jeszcze lepiej jakbyś zmieniła zapytanie na:
SELECT count(ID_PORT_BBB) INTO wynik_1 FROM PORTY_BBB
WHERE ID_PORT_BBB = :NEW.PORTY_BBB_ID_PORT_BBB
AND STATUS_PORTU_BBB = 'zajety';
i później ifologia czyli
IF wynik_1=1 THEN
RAISE_APPLICATION_ERROR(-20001, 'Podany port jest zajęty');
ELSIF wynik_1>1 THEN
RAISE_APPLICATION_ERROR(-20001, 'Coś jest nie tak. Mamy więcej niż jeden zajęty port o tym samym ID');
END IF;
/*Możemy przejść dalej ponieważ nie ma zajętych portów o podanym id*/
I dodatkowo powinniśmy zabezpieczyć sytuację, w której :NEW.PORTY_BBB_ID_PORT_BBB bedzie NULL