Oracle регистрирует изменения в XML - PullRequest
1 голос
/ 19 июля 2011

Я хочу регистрировать изменения данных в некоторых таблицах Oracle. Структура таблицы журнала:

(...)
olddata (xmltype)
newdata (xmltype)

Изменения данных будут регистрироваться триггерами при обновлении, вставке, удалении Есть ли какой-нибудь простой способ заставить работать код ниже?

log.olddata := magic_rowtype_to_xml_function(old);

Я видел DBMS_XMLGEN.getXmltype('select * from table where row_id = x'), но я не нашел, как заставить его работать с типами строк.

EDIT

Я нашёл немного работы:

Сначала получите немного информации о таблице:

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 ]

1 голос
/ 19 июля 2011

Похоже, у вас есть 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 обладает встроенной способностью регистрировать изменения в таблице.Теперь я забыл название функции, но она создает другую таблицу журнала и представление для вашей таблицы, запоминает все изменения и может даже представить данные в таблице, как они существовали, например, неделю назад.

0 голосов
/ 22 июля 2011

Я нашел небольшой объем работ:

Сначала получите немного информации о таблице:

select 'xmlelement("'|| column_name||'",new.' || column_name || '),'  from all_tab_columns where lower(table_name) = 'my_table';

и просто скопируйте результат вставки в

select xmlelement("doc",

--paste here

) from dual;

Уродливо, но работает.

...