Oracle PL/SQL - トリガを有効または無効にする

Oracle PL / SQL –トリガーの有効化と無効化

この記事では、ALTER TRIGGERALTER 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
次のような状況では、トリガーを無効にする必要がある場合があります。

  1. トリガーが参照するオブジェクトは使用できません。

  2. 大量のデータロードを実行し、トリガーを起動せずにデータをすばやく処理する必要があります。

  3. トリガーが適用されるテーブルにデータをロードしています。

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

有効