Oracle PL / SQL - Aktivieren und Deaktivieren von Triggern
Dieser Artikel zeigt Ihnen, wie SieALTER TRIGGER
undALTER TABLE
zum Aktivieren und Deaktivieren von Triggern verwenden.
-- 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. Tabelle + Trigger
1.1 Create a table and two triggers on it.
Testdaten
--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;
Wenn Sie Trigger erstellen, sind diese standardmäßigENABLED
.
SELECT TRIGGER_NAME,STATUS FROM USER_TRIGGERS where upper(TRIGGER_NAME) in ('TRG_TEST_A','TRG_TEST_B');
TRIGGER_NAME | STATUS |
---|---|
trg_test_a |
AKTIVIERT |
trg_test_b |
AKTIVIERT |
2. ALTER TRIGGER - Aktiviert und deaktiviert einen Trigger
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 | STATUS |
---|---|
TRG_TEST_A |
BEHINDERT |
Note
Manchmal müssen Sie den Trigger unter bestimmten Bedingungen deaktivieren, z.
-
Ein Objekt, auf das der Trigger verweist, ist nicht verfügbar.
-
Sie müssen eine große Datenladung durchführen und möchten, dass diese schnell ausgeführt wird, ohne dass Auslöser ausgelöst werden.
-
Sie laden Daten in die Tabelle, für die der Trigger gilt.
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 | STATUS |
---|---|
TRG_TEST_A |
AKTIVIERT |
3. ALTER TABLE - Aktiviert und deaktiviert alle Trigger
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 | STATUS |
---|---|
TRG_TEST_A |
BEHINDERT |
TRG_TEST_B |
BEHINDERT |
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 | STATUS |
---|---|
TRG_TEST_A |
AKTIVIERT |
TRG_TEST_B |
AKTIVIERT |