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

Come chiamare una procedura che utilizza la stessa tabella dopo il trigger

Non puoi.

Un normale trigger a livello di riga non può eseguire query sulla tabella su cui è definito il trigger perché ciò solleverebbe un'eccezione di tabella mutante. Presumo che sia per questo che hai dichiarato che il tuo trigger utilizza una transazione autonoma (una transazione autonoma per qualsiasi cosa diversa dalla registrazione persistente è quasi certamente un errore). Se lo fai, tuttavia, il tuo trigger non può vedere le modifiche non vincolate apportate dalla transazione di attivazione. Questo è il problema che stai riscontrando ora.

Un'alternativa sarebbe utilizzare un trigger composto . Dichiareresti una raccolta di test_table.type_%type , dovresti aggiungere i valori che stanno cambiando a questa raccolta nella parte a livello di riga del trigger, quindi scorrere gli elementi nella raccolta nella parte dopo l'istruzione del trigger. Un trigger a livello di istruzione può interrogare la tabella su cui è definito il trigger in modo da poter richiamare la procedura dalla parte successiva all'istruzione del trigger composto.