Oracle
 sql >> Database >  >> RDS >> Oracle

errore di attivazione non valido

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ù.