Oracle PL/SQL - Activer et désactiver les déclencheurs

Oracle PL / SQL - Activer et désactiver les déclencheurs

Cet article vous montre comment utiliserALTER TRIGGER etALTER TABLE pour activer et désactiver les déclencheurs.

-- enable / disable a trigger
ALTER TRIGGER trigger_name ENABLE;
ALTER TRIGGER trigger_name DISABLE;

-- enable / disable all triggers for a specific table
ALTER TABLE table_name ENABLE ALL TRIGGERS;
ALTER TABLE table_name DISABLE ALL TRIGGERS;

1. Table + Déclencheurs

1.1 Create a table and two triggers on it.

données de test

--Creating test_data table.

CREATE TABLE test_data
(
  id number(5) primary key,
  test_result number(5)
);

trg_test_a

SET SERVEROUTPUT ON;

CREATE OR REPLACE TRIGGER trg_test_a
BEFORE
     UPDATE OR DELETE OR INSERT
ON test_data
  FOR EACH ROW

BEGIN

  -- business logic will be here to perform on any insert/update/delete
  dbms_output.put_line('trg_test_a Trigger called.');

END;

trg_test_b

SET SERVEROUTPUT ON;

CREATE OR REPLACE TRIGGER trg_test_b
BEFORE
     UPDATE OR DELETE OR INSERT
ON test_data
  FOR EACH ROW

BEGIN

  dbms_output.put_line('trg_test_b Trigger called.');

END;

Lorsque vous créez des déclencheurs, ils serontENABLED par défaut.

SELECT TRIGGER_NAME,STATUS FROM USER_TRIGGERS where upper(TRIGGER_NAME) in ('TRG_TEST_A','TRG_TEST_B');
TRIGGER_NAME STATUT

trg_test_a

ACTIVÉE

trg_test_b

ACTIVÉE

2. ALTER TRIGGER - Activer et désactiver un déclencheur

2.1 Example to disable a trigger trg_test_a

ALTER TRIGGER trg_test_a DISABLE;

2.2 Check trigger status.

SELECT TRIGGER_NAME,STATUS FROM USER_TRIGGERS where upper(TRIGGER_NAME) = 'TRG_TEST_A';
TRIGGER_NAME STATUT

TRG_TEST_A

DÉSACTIVÉ

Note
Parfois, vous devrez désactiver le déclenchement dans certaines conditions comme,

  1. Un objet auquel le déclencheur fait référence n'est pas disponible.

  2. Vous devez effectuer un chargement de données volumineux et souhaitez qu'il se déroule rapidement sans déclencher de déclencheurs.

  3. Vous chargez des données dans la table à laquelle s'applique le déclencheur.

2.3 Example to enable a disabled trigger trg_test_a

ALTER TRIGGER trg_test_a ENABLE;

2.4 Check trigger status again.

SELECT TRIGGER_NAME,STATUS FROM USER_TRIGGERS where upper(TRIGGER_NAME) = 'TRG_TEST_A';
TRIGGER_NAME STATUT

TRG_TEST_A

ACTIVÉE

3. ALTER TABLE - Activer et désactiver tous les déclencheurs

3.1 Example to disbale all triggers for a specific table test_data

ALTER TABLE test_data DISABLE ALL TRIGGERS;

3.2 Check triggers status.

SELECT TRIGGER_NAME,STATUS FROM USER_TRIGGERS where upper(TRIGGER_NAME) IN ('TRG_TEST_A','TRG_TEST_B');
TRIGGER_NAME STATUT

TRG_TEST_A

DÉSACTIVÉ

TRG_TEST_B

DÉSACTIVÉ

3.3 Example to enable all triggers for a specific table test_data

ALTER TABLE test_data ENABLE ALL TRIGGERS;

3.4 Check triggers status again.

SELECT TRIGGER_NAME,STATUS FROM USER_TRIGGERS where upper(TRIGGER_NAME) IN ('TRG_TEST_A','TRG_TEST_B');
TRIGGER_NAME STATUT

TRG_TEST_A

ACTIVÉE

TRG_TEST_B

ACTIVÉE