sql >> Base de Datos >  >> RDS >> Oracle

Cómo llamar a un procedimiento que usa la misma tabla después del desencadenador

No puedes.

Un activador de nivel de fila normal no puede consultar la tabla en la que está definido el activador porque generaría una excepción de tabla mutante. Supongo que es por eso que ha declarado su disparador para usar una transacción autónoma (una transacción autónoma para cualquier cosa que no sea el registro persistente es casi seguro un error). Sin embargo, si lo hace, su disparador no puede ver los cambios no confirmados realizados por la transacción disparadora. Ese es el problema que estás encontrando ahora.

Una alternativa sería utilizar un activador compuesto . Declararías una colección de test_table.type_%type , agregaría los valores que están cambiando a esta colección en la parte de nivel de fila de su disparador, y luego iteraría sobre los elementos en la colección en la parte posterior a la declaración de su disparador. Se permite que un activador a nivel de instrucción consulte la tabla en la que se define el activador para que pueda llamar a su procedimiento desde la parte posterior a la instrucción de su activador compuesto.