Этот код выглядит некорректно:
SELECT SERVICETYPE INTO type
FROM (SELECT P.SERVICETYPE, D.DNAME
FROM DEPT D JOIN
EMP E
ON D.DEPTNO = E.DEPTNO JOIN
PURCHASE P
ON E.EMPNO = P.SERVEDBY
WHERE D.DNAME = 'SALES - Sunshine'
) AND P.SERVEDBY IN (:NEW.SERVEDBY);
)
перед AND
следует перемещать после последнего условия.
IN
со столбцом такжеподозрительный. Однако это не приведет к ошибке компиляции, просто к непредвиденному поведению во время выполнения.