Giả sử tôi có kích hoạt AFTER ALTER
trên cơ sở dữ liệu Oracle của mình và tôi đổi tên một số đối tượng cơ sở dữ liệu (ALTER ... RENAME TO ...
). Trong trình kích hoạt, làm cách nào để xác định tên mới của đối tượng cơ sở dữ liệu? Dường như các hàm ORA_DICT_OBJ_OWNER
, ORA_DICT_OBJ_NAME
và ORA_DICT_OBJ_TYPE
đều trả lại giá trị cũ của đối tượng cơ sở dữ liệu.Oracle: Làm cách nào để xác định tên MỚI của đối tượng trong trình kích hoạt "SAU KHI GÌ"?
Ví dụ:
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;
Giả sử tôi đổi tên một bảng:
ALTER TABLE USELESS_TABLE9 RENAME TO USELESS_TABLE10
Các đầu ra cơ sở dữ liệu này:
Before alter: DEVELOPER.USELESS_TABLE9 (TABLE) After alter: DEVELOPER.USELESS_TABLE9 (TABLE)
Cập nhật: Thật không may, sản lượng tôi đã trình bày ở trên đã sai. Đầu ra thực sự được tạo bởi kích hoạt BEFORE DDL
và kích hoạt AFTER DDL
mà tôi đã tạo trước đó, không bởi các kích hoạt BEFORE RENAME
và AFTER RENAME
. Tôi sẽ tiếp tục điều tra lý do tại sao BEFORE RENAME
và AFTER RENAME
trigger không bắn ...
Cập nhật: Dường như BEFORE RENAME
và AFTER RENAME
trigger từ chối bắn, nhưng BEFORE ALTER
và AFTER ALTER
trigger làm. Tôi đã cập nhật câu hỏi cho phù hợp.