Ok, posterò questo come risposta perché i commenti non consentiranno così tanto testo.
Vedendo le tue tabelle alcune cose non sono ancora chiare. la tua funzione ADD_PACIENTE_QUARTO implementa un SELECT istruzione che afferma il predicato Where PAC = CONT ma PAC non è in PACIENTE ma piuttosto è la variabile locale in cui memorizzi il tuo risultato e CONT è il tuo parametro, non è chiaro cosa hai provato lì.
Ora il tuo trigger ha alcuni difetti nella logica e nell'implementazione.
Prima di tutto, il nome del tuo attivatore è PACIENTE_TRIGGER ma la riga INSERT OR UPDATE ON TIPO_QUARTO mi dice che è sul TIPO_QUARTO tabella, questo non è un problema sintatticamente ma logicamente può essere una seccatura per qualcuno che sta cercando di capire a quale tabella appartiene il trigger.
Quindi, usa INSERT OR UPDATE OF TIPO ON TIPO_QUARTO per monitorare gli inserimenti o aggiornare le modifiche solo nella colonna TIPO di TIPO_QUARTO tabella.
Ora questa riga If :new.TIPO_QUARTO = 'UTI' then , supponendo che questo trigger sia allegato a TIPO_QUARTO tabella, quella tabella non ha una colonna denominata TIPO_QUARTO cambialo in :new.TIPO .
Successivamente, PAC è di tipo VARCHAR quindi non mi è chiaro cosa stai cercando di fare in PAC := PAC - :new.TIPO; e in PAC := PAC + :new.TIPO; entrambe le righe genereranno invalid number eccezione in quanto non puoi aggiungere o sottrarre stringhe, forse la tua intenzione era quella di concatenare o ottenere una sottostringa.
E infine la chiamata a UPDATE TIPO_QUARTO SET TIPO = PAC all'interno di un trigger per TIPO_QUARTO risulterà in mutating table eccezione, non puoi interrogare/aggiornare una tabella che si trova nel mezzo di un'istruzione DML (INSERT o UPDATE in questo caso) per risolvere questo problema puoi semplicemente assegnare :new.TIPO := PAC .
Prenditi cura di questi dettagli e forse allora il tuo problema non sarà più.