Oracle日志记录更改为XML

时间:2011-07-19 10:11:30

标签: xml oracle xml-serialization

我想记录一些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;

丑陋,但工作。

2 个答案:

答案 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;

丑陋,但工作。