Como você notou, será difícil responder às suas necessidades de negócios com gatilhos. A razão é que a Oracle pode atualize/insira as tabelas com mais de um thread ao mesmo tempo para uma única consulta (DML paralelo). Isso implica que sua sessão não pode consultar a tabela que ela atualiza enquanto a atualização ocorre .
Se você realmente quiser fazer isso com gatilhos, terá que seguir o título tipo de lógica mostrada neste artigo por Tom Kyte . Como você pode ver, não é algo simples.
Existe outro método, mais simples, mais elegante, mais fácil de manter:use procedimentos. Revogue o direito de atualização/inserção para o(s) usuário(s) do aplicativo e escreva um conjunto de procedimentos que permitem que o aplicativo atualize as colunas de estado.
Esses procedimentos manteriam um bloqueio na linha pai (para evitar que várias sessões modifiquem o mesmo conjunto de linhas) e aplicariam sua lógica de negócios de maneira eficiente, legível e de fácil manutenção.