Auswahl  

 

Oracle
PL/SQL
10.x:11.2:12.1:12.2:18.1
Trigger, Reenable
25.01.18
MP
03.07.18
MM

Body

Häufig möchte man einen Trigger kurz einmal ausschalten, eine Aktion ausführen und ihn dann wieder einschalten. Nur dann vergisst man das Einschalten wieder. Das muss nicht sein:-)

Die folgende Routine schaltet einen gewünschten Trigger im aktuellen Schema zwar auf DISABLE, setzt ihn aber nach einer frei wählbaren Zeitspanne (in Minuten) wieder auf ENABLE.

CREATE OR REPLACE PROCEDURE TRIGGER_SLEEP (
  P_TRIGGER_NAME IN VARCHAR2,
  p_timeout      IN NUMBER default 30) -- in Minuten
  IS
BEGIN
  EXECUTE IMMEDIATE 'ALTER TRIGGER '||p_trigger_name||' DISABLE';
  DBMS_SCHEDULER.CREATE_JOB(
    JOB_NAME   => 'trigger_reactivate',
    JOB_TYPE   => 'PLSQL_BLOCK',
    JOB_ACTION => q'!BEGIN
                       EXECUTE IMMEDIATE 'ALTER TRIGGER !'||P_TRIGGER_NAME||q'! ENABLE';
                     END;!',
    START_DATE => SYSDATE+ p_timeout/24/60,
    ENABLED    => TRUE);
    COMMIT;
END;
/


Solche und weitere tolle Tricks lernt man in einem unserer PL/SQL Kurse.