My Oracle Support Banner

SQL Developer 4.0.3 においてテーブルを作成するとトリガーは二回実行されます (Doc ID 1958394.1)

Last updated on AUGUST 04, 2018

適用範囲:

Oracle SQL Developer - バージョン 4.0 から 4.0 [リリース 4]
この文書の内容はすべてのプラットフォームに適用されます。

現象

 SQL Developer 4.0.3 においてテーブルを作成するとトリガーは二回実行されます。本事象は下記の条件に満たす場合に発生します:

- トリガー自体はシステムトリガーである。

- トリガーに "raise_application_error(-20000, 'CUSTOM ERROR');" が含まれている。

次の手順にて本事象を再現できます:

 1. テーブルを作成する。

例:

- create table testlog(log varchar2(255));

2. プロシージャを作成する:

例:

SQL> create or replace procedure write_log(plog varchar2) is pragma
autonomous_transaction;
begin
  insert into testlog(log) values (plog);
  commit;
end;  

3. raise_application_error を含むトリガーを作成する:

SQL> create or replace trigger insert_log after create on database
2  begin
   write_log('XXXXXX=' || ORA_DICT_OBJ_NAME);
   raise_application_error(-20000, 'CUSTOM ERROR');
end;  

Trigger created.

4. SQL Developer より任意のテーブルを作成した後に、testlog テーブルに 2 行インサートされたことを確認できます。つまり、

    トリガーが二回実行されたことを確認できます。

 

原因

To view full details, sign in with your My Oracle Support account.

Don't have a My Oracle Support account? Click to get started!


My Oracle Support provides customers with access to over a million knowledge articles and a vibrant support community of peers and Oracle experts.