Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como chamar um procedimento que usa a mesma tabela após o gatilho


Você não pode.

Um gatilho de nível de linha normal não pode consultar a tabela em que o gatilho está definido porque isso geraria uma exceção de tabela mutante. Estou assumindo que é por isso que você declarou seu gatilho para usar uma transação autônoma (uma transação autônoma para qualquer coisa que não seja o log persistente é quase certamente um erro). Se você fizer isso, no entanto, seu acionador não poderá ver as alterações não confirmadas feitas pela transação acionadora. Esse é o problema que você está encontrando agora.

Uma alternativa seria usar um gatilho composto . Você declararia uma coleção de test_table.type_%type , você adicionaria os valores que estão sendo alterados a essa coleção na parte de nível de linha do seu gatilho e, em seguida, iteraria sobre os elementos da coleção na parte de pós-instrução do seu gatilho. Um gatilho em nível de instrução tem permissão para consultar a tabela na qual o gatilho está definido para que você possa chamar seu procedimento a partir da parte de instrução posterior do gatilho composto.