假设我的AFTER ALTER
Oracle 数据库上有一个触发器,并且我重命名了某个数据库对象 ( 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
andAFTER RENAME
触发器生成的。我将继续调查BEFORE RENAME
和AFTER RENAME
触发器不触发的原因......
更新:似乎BEFORE RENAME
andAFTER RENAME
触发器拒绝触发,但BEFORE ALTER
andAFTER ALTER
触发器确实如此。我已经相应地更新了这个问题。