Oracle PL / SQL –トリガーの有効化と無効化
この記事では、ALTER TRIGGER
とALTER TABLE
を使用してトリガーを有効または無効にする方法を説明します。
-- 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. テーブル+トリガー
1.1 Create a table and two triggers on it.
テストデータ
--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;
トリガーを作成すると、デフォルトではENABLED
になります。
SELECT TRIGGER_NAME,STATUS FROM USER_TRIGGERS where upper(TRIGGER_NAME) in ('TRG_TEST_A','TRG_TEST_B');
TRIGGER_NAME | 状態 |
---|---|
trg_test_a |
有効 |
trg_test_b |
有効 |
2. ALTER 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 | 状態 |
---|---|
TRG_TEST_A |
無効 |
Note
次のような状況では、トリガーを無効にする必要がある場合があります。
-
トリガーが参照するオブジェクトは使用できません。
-
大量のデータロードを実行し、トリガーを起動せずにデータをすばやく処理する必要があります。
-
トリガーが適用されるテーブルにデータをロードしています。
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 | 状態 |
---|---|
TRG_TEST_A |
有効 |
3. ALTER TABLE –すべてのトリガーの有効化と無効化
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 | 状態 |
---|---|
TRG_TEST_A |
無効 |
TRG_TEST_B |
無効 |
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 | 状態 |
---|---|
TRG_TEST_A |
有効 |
TRG_TEST_B |
有効 |