2012-01-11 9 views
7

Soy muy nuevo en los desencadenadores de Oracle. Supongamos que tengo un disparador en un inserto en la tabla emp. ¿Hay alguna manera de averiguar cuál fue el registro insertado que disparó el gatillo? Quería que el desencadenador tuviera un código que hiciera algo si el registro insertado tenía un valor particular.Obtener el valor que activó el desencadenador de Oracle

Respuesta

10

Asumiendo que tiene un trigger a nivel de fila, sólo tiene que utilizar el :NEW pseudo-registro

CREATE TRIGGER name_of_trigger 
    BEFORE INSERT ON emp 
    FOR EACH ROW 
DECLARE 
    <<declare variables>> 
BEGIN 
    IF(:new.ename = 'JUSTIN') 
    THEN 
    <<do something if the newly inserted ENAME value is 'JUSTIN'>> 
    END IF; 
END; 

Para un desencadenador DDL, el enfoque es completamente diferente. En ese caso, las pseudofunciones ora_dict_obj_owner y ora_dict_obj_name devolverán el propietario y el nombre de la tabla en la que está operando la instrucción DDL.

+0

Hola, @Justin Cave, siento molestarte pero me di cuenta de que realmente necesito un disparador DDL o de sistema y no un desencadenador DML. Llamaría a un activador cada vez que se creara una nueva tabla en el esquema 'CREAR O REEMPLAZAR EL DISPARADOR drop_trigger DESPUÉS DE CREAR ON hr.SCHEMA BEGIN END;' ¿Cómo obtendré el nombre de la tabla creada que activó el activador ahora? ¿Sigue siendo NUEVO? – Eosphorus

+0

@Eosphorus - No, los activadores de DDL son animales muy diferentes. Actualizado mi respuesta. –

+0

muchas gracias Justin. Esto es algunas veces que me has ayudado ahora. Realmente lo aprecio :) – Eosphorus

Cuestiones relacionadas