【发布时间】:2017-05-15 23:25:12
【问题描述】:
以下是我的查询。我想获取表中新创建的列以用于审计目的。因此,我创建了一个 DDL 触发器来捕获事件。但是触发器不适用于添加的列。正确捕获了删除列事件但没有添加列。有人可以帮我吗? 我尝试使用 'AFTER alter ON SCHEMA' tats 也不起作用。
CREATE OR REPLACE TRIGGER trg_test
BEFORE CREATE OR ALTER OR DROP ON SCHEMA
DECLARE
CURSOR get_column_name(i_owner IN VARCHAR2,i_obj_name IN VARCHAR2)
IS
SELECT column_name
FROM all_tab_columns
WHERE owner = i_owner AND table_name = i_obj_name;
-- pcolumn_name dba_tab_columns.column_name%TYPE;
BEGIN
IF ( ora_dict_obj_type = 'TABLE'
AND ora_sysevent IN ('ALTER')
AND ora_dict_obj_owner = 'SYS'
)
THEN
FOR x IN get_column_name(ora_dict_obj_owner ,ora_dict_obj_name)
LOOP
IF ora_is_drop_column (x.column_name)
THEN
dbms_output.put_line('Deleted column :' || x.column_name);
END IF;
IF ora_is_alter_column (x.column_name)
THEN
dbms_output.put_line('Newly added column :' || x.column_name);
END IF;
END LOOP;
END IF;
END;
/
【问题讨论】: