Puedo deshabilitar temporalmente un disparo en un procedimiento almacenado de oracle?

ejemplo (pseudocódigo):

MyProcedure{

    disable MyTrigger;

    //doStuff

    enable MyTrigger;

};

thx de antemano.
Giuseppe

OriginalEl autor Giuseppe | 2011-09-07

1 Comentario

  1. 11

    Puede emitir DDL como «ALTER TRIGGER» estados de cuenta a través de SQL dinámico, mediante la EJECUCIÓN INMEDIATA de la sintaxis.

    Una descripción de que es aquí:
    http://download.oracle.com/docs/cd/B12037_01/appdev.101/b10807/13_elems017.htm

    PROCEDURE myProcedure
    IS
    BEGIN
       EXECUTE IMMEDIATE 'ALTER TRIGGER triggername DISABLE';
    
       -- Do work
    
       EXECUTE IMMEDIATE 'ALTER TRIGGER triggername ENABLE';
    EXCEPTION
       WHEN OTHERS
       THEN
          -- Handle Exceptions
    END myProcedure;

    Puede generar el SQL dinámico utilizando la variable VARCHAR demasiado si te gusta:

    PROCEDURE myProcedure
    IS
       v_triggername VARCHAR2(30) := 'triggername';
    BEGIN
       EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' DISABLE';
    
       -- Do work
    
       EXECUTE IMMEDIATE 'ALTER TRIGGER '||v_triggername||' ENABLE';
    EXCEPTION
       WHEN OTHERS
       THEN
          -- Handle Exceptions
    END myProcedure;

    Si usted hace esto, entonces usted debe también mirar en el paquete DBMS_ASSERT para envolver el triggername y ayudar a fortalecer su código contra ataques de inyección SQL.

    que era exactamente lo que yo quiero. thx man!
    Me alegro de que podría ayudar.
    Hay que tener cuidado: Alter desencadenador ddl -> hace que la comete.

    OriginalEl autor Ollie

Dejar respuesta

Please enter your comment!
Please enter your name here