2010-09-05 8 views
9

¿Alguien puede explicar la diferencia entre el desencadenante "antes" y "después" en el oráculo 10g con un ejemplo?diferencia antes y después del desencadenador en el oráculo

+0

Todavía no estaba seguro de lo que estaba buscando en términos de simplicidad, así que borré mi respuesta. Alguien más puede tener una buena idea. –

+0

Por cada pequeña duda estoy publicando una pregunta en desbordamiento de pila sin pensar .....(Creo que no debería hacerlo) ... Entendí el concepto de disparadores ahora. De aquí en adelante pensaré antes de publicar la pregunta ... – Jagan

Respuesta

22

En primer lugar, voy a empezar mi respuesta definiendo gatillo: un gatillo es un procedimiento almacenado que se ejecuta cuando se agrega una fila, modificado o eliminado.

disparadores pueden ejecutar ANTES se toma la acción o DESPUÉS se adopte la medida.

BEFORE desencadenantes generalmente se utilizan cuando la validación debe llevarse a cabo antes de aceptar el cambio. Se ejecutan antes de realizar cualquier cambio en la base de datos. Supongamos que ejecuta una base de datos para un banco. Tiene una tabla accounts y una tabla transactions. Si un usuario realiza un retiro de su cuenta, le recomendamos que se asegure de que el usuario tenga suficientes créditos en su cuenta para su retiro. El activador BEFORE permitirá hacer eso y evitar que la fila se inserte en transactions si el saldo en accounts no es suficiente.

AFTER desencadenantes generalmente se utilizan cuando la información debe actualizarse en una tabla separada debido a un cambio. Se ejecutan después de que se hayan realizado cambios en la base de datos (no necesariamente confirmados). Regresemos a nuestro ejemplo anterior. Después de una transacción exitosa, querrá que se actualice balance en la tabla accounts. Un disparador AFTER le permitirá hacer exactamente eso.

+1

+1 Solo agregaría que algunas validaciones de gatillo deben realizarse en la fila DESPUÉS desencadena, porque es solo en los desencadenadores DESPUÉS que los valores de la columna son "fijos". En un desencadenante ANTES, puede validar y pasar alguna regla compleja basada en el valor de: NEW.col solo para el valor de: NEW.col que se cambiará más tarde en el desencadenante, de modo que la regla ahora se infringe. –

6

No estoy del todo seguro de lo que le interesa saber, así que lo mantendré como algo fundamental.

activadores anteriores

  • De acuerdo con el nombre, estos factores desencadenantes son despedidos antes de la creación de la fila en la tabla. Posteriormente, dado que la fila aún no se ha creado, tiene acceso completo al campo: new.table_element. Esto permite la limpieza y uniformidad de los datos si se intenta insertar/actualizar datos no deseados/malformados. Este es solo un ejemplo básico, pero debe utilizar el activador anterior cada vez que necesite acceder a los datos ": nuevos".

activadores posteriores

  • Desde los incendios después de gatillo una vez ya se ha creado la fila, estos disparadores se utilizan normalmente cuando se desea la lógica que se produzca debido a la fila. Por ejemplo, si tiene una tabla de direcciones y un usuario actualiza su dirección, puede actualizar los identificadores de referencia de direcciones en una tabla xref luego de la creación (si conserva también todas las direcciones antiguas). Además, a diferencia del disparador anterior, no tiene acceso para modificar ninguno de los valores de la columna ya que la fila ya existe en la tabla.
1

desencadenante anterior se utilizan cuando la acción del disparador debe determinar si las declaraciones de activación se debe permitir que completar .por mediante activadores anteriores usuario puede eliminar el procesamiento innecesario de la sentencia activadora pero, activadores posteriores se utilizan cuando los estados de activación debe completarse antes de ejecutar la acción desencadenante.

+0

Por favor edite su respuesta existente, en lugar de duplicar otra. – wonea

Cuestiones relacionadas