2012-05-17 8 views
5

Por favor alguien puede explicar lo que se entiende por:nuevo y viejo código de disparo

:new y :old en el código de activación.

+0

¿Es esta tarea? – Sparky

+0

danos un contexto – keyser

+0

es una pregunta de revisión que estoy preparando, tienes que responder a la pregunta "¿qué significa: nuevo y: viejo en código de activación?" – user1300580

Respuesta

24

:new y :old son pseudoregistros que le permiten acceder a los valores nuevos y antiguos de columnas particulares. Si tengo una tabla

CREATE TABLE foo (
    foo_id NUMBER PRIMARY KEY, 
    bar VARCHAR2(10), 
    baz VARCHAR2(10) 
); 

y puedo insertar una fila

INSERT INTO foo(foo_id, bar, baz) 
    VALUES(1, 'Bar 1', 'Baz 1'); 

entonces en un nivel de fila antes de desencadenador de inserción

:new.foo_id will be 1 
:new.bar will be 'Bar 1' 
:new.baz will be 'Baz 1' 

mientras

:old.foo_id will be NULL 
:old.bar will be NULL 
:old.baz will be NULL 

Si luego actualice esa fila

UPDATE foo 
    SET baz = 'Baz 2' 
WHERE foo_id = 1 

entonces en un disparador de actualización a nivel de fila antes de

:new.foo_id will be 1 
:new.bar will be 'Bar 1' 
:new.baz will be 'Baz 2' 

mientras

:old.foo_id will be 1 
:old.bar will be 'Bar 1' 
:old.baz will be 'Baz 1' 

Si a continuación, eliminar la fila

DELETE FROM foo 
WHERE foo_id = 1 

luego en una fila antes de eliminar disparador de nivel,

:new.foo_id will be NULL 
:new.bar will be NULL 
:new.baz will be NULL 

mientras

:old.foo_id will be 1 
:old.bar will be 'Bar 1' 
:old.baz will be 'Baz 2' 
2

En un disparador del registro :old contiene los valores antes de la ejecución de la sentencia activadora, el registro :new contiene los valores después de la ejecución.

3

en la llanura Inglés:

Son alias que le permiten acceder a la información de la forma de una columna era (de edad) y cómo va a ser (nuevo).

From Oracle documentation:

valores antiguos y nuevos están disponibles tanto antes como después de la fila activa. Se puede asignar un nuevo valor de columna en un desencadenante de fila ANTES, pero no en un desencadenante de fila DESPUÉS (porque la instrucción desencadenante surte efecto antes de que se active un desencadenador de fila DESPUÉS). Si un desencadenante ANTES de la fila cambia el valor de new.column, un desencadenante de la fila AFTER disparado por la misma instrucción ve el cambio asignado por el desencadenante ANTES de la fila.

Los nombres de correlación también se pueden usar en la expresión booleana de una cláusula WHEN. Los dos puntos deben preceder a los calificadores antiguos y nuevos cuando se usan en el cuerpo de un desencadenante, pero no se permiten dos puntos al usar los calificadores en la cláusula WHEN o la opción REFERENCING.

2

el valor old es el valor before the change y el valor new es la value to be changed, así por ejemplo, en un update set col1=10, 10 es el valor new y el valor que es corriente en la columna es la edad en.

En un inserto, tampoco hay valor antiguo, nuevo y en una eliminación no es nuevo valor, sólo el viejo

Cuestiones relacionadas