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.