Oracleデータベースにトリガーがあり、AFTER ALTER
データベースオブジェクトの名前を変更するとします(ALTER ... RENAME TO ...
)。トリガー内で、データベースオブジェクトの新しい名前を確認するにはどうすればよいですか?ORA_DICT_OBJ_OWNER
、ORA_DICT_OBJ_NAME
および関数はすべて、データベースオブジェクトの古いORA_DICT_OBJ_TYPE
値を返すようです。
例えば:
CREATE OR REPLACE TRIGGER ADAM_BEFORE_AFTER BEFORE ALTER ON DATABASE
BEGIN
DBMS_OUTPUT.put_line('Before alter: ' || ora_dict_obj_owner || '.' || ora_dict_obj_name || ' (' || ora_dict_obj_type || ')');
END;
CREATE OR REPLACE TRIGGER ADAM_AFTER_ALTER AFTER ALTER ON DATABASE
BEGIN
DBMS_OUTPUT.put_line('After alter: ' || ora_dict_obj_owner || '.' || ora_dict_obj_name || ' (' || ora_dict_obj_type || ')');
END;
テーブルの名前を変更するとします。
ALTER TABLE USELESS_TABLE9 RENAME TO USELESS_TABLE10
データベースはこれを出力します:
変更前:DEVELOPER.USELESS_TABLE9(TABLE) 変更後:DEVELOPER.USELESS_TABLE9(TABLE)
更新:残念ながら、上記の出力は正しくありませんでした。出力は、実際には、トリガーとトリガーではなく、以前に作成したトリガーとトリガーによって生成されていましBEFORE DDL
た。とトリガーが起動しない理由を引き続き調査します...AFTER DDL
BEFORE RENAME
AFTER RENAME
BEFORE RENAME
AFTER RENAME
更新:とトリガーは発砲を拒否しているように見えますが、BEFORE RENAME
とトリガーは発砲します。それに応じて質問を更新しました。AFTER RENAME
BEFORE ALTER
AFTER ALTER