我想记录一些Oracle表中的数据更改。日志表的结构是:
(...)
olddata (xmltype)
newdata (xmltype)
更新,插入,删除时触发器将记录数据更改 有没有简单的方法让代码在下面工作?
log.olddata := magic_rowtype_to_xml_function(old);
我见过DBMS_XMLGEN.getXmltype('select * from table where row_id = x')
,但我还没有找到如何强制它使用行类型。
修改
我找到了很少的工作:
首先获取关于表的一些信息:
select 'xmlelement("'|| column_name||'",new.' || column_name || '),' from all_tab_columns where lower(table_name) = 'my_table';
只需将粘贴结果复制到
即可select xmlelement("doc",
--paste here
) from dual;
丑陋,但工作。
答案 0 :(得分:1)
您似乎有几个数据表的1个日志表。我认为这是一个坏主意。这些xmllogs将是IMO严重可搜索的。如果您有一个数据表的日志表,那么您可以模仿结构并更好地掌握更改。
像
这样的东西create table t (
id int primary key,
dat varchar2(1000));
和
create table t_changes (change_id int primary key,
change_date date,
change_user number,
--and now the original columns
id int,
dat varchar2(1000));
Oracle还具有记录表中更改的内置功能。我现在忘记了该功能的名称,但它为您的表创建了另一个日志表和视图,并记住每个更改,甚至可以在表中存在数据,例如它们存在,例如一周前。
答案 1 :(得分:0)
我找不到任何解决办法:
首先获取关于表的一些信息:
select 'xmlelement("'|| column_name||'",new.' || column_name || '),' from all_tab_columns where lower(table_name) = 'my_table';
只需将粘贴结果复制到
即可select xmlelement("doc",
--paste here
) from dual;
丑陋,但工作。