Я пытаюсь реализовать отменить и регистрация функция для моего проекта.Вставка значений строк в столбец другой таблицы
Когда пользователь удаляет строку из таблицы с DELETE_ROW процедуры я выбрать все значения из этой строки и вставить его в мою row_history таблицу по сериализации значения строки в XML с LOG_DELETED_ROW процедуры, то я удалить строку из его оригинальная таблица.
Сериализация со встроенными функциями Oracle была простой, но я не мог найти способ десериализации строки данных и вставки ее обратно в собственную таблицу.
Есть ли способ сохранить эту удаленную строку в другую таблицу и восстановить ее при необходимости?
Удаление Процедура: Процедура
create or replace procedure DELETE_ROW(tableName varchar2, userId varchar2, columnName varchar2, columnValue number) is
begin
log_deleted_row(tableName, userId, columnName, columnValue);
execute immediate 'delete from ' || tableName || ' where ' || columnName || ' = ' || columnValue;
end DELETE_ROW;
Logging:
create or replace procedure LOG_DELETED_ROW(tableName varchar2, userId varchar2, columnName varchar2, columnValue number) is
tableId number;
begin
SELECT ID into tableId FROM TABLES WHERE NAME = tableName;
execute immediate
'INSERT INTO ROW_HISTORY(TABLE_ID,ROW_ID,ROW_DATA)
SELECT
'|| tableId ||',
'|| columnValue ||',
to_clob(
DBMS_XMLGEN.getxmltype(
''SELECT * FROM ' || tableName || ' where ' || columnName || ' = ' || columnValue || '''
)
)FROM DUAL';
end LOG_DELETED_ROW;
Row История Таблица:
create table ROW_HISTORY
(
ID NUMBER not null,
TABLE_ID NUMBER not null,
ROW_ID NUMBER not null,
ROW_DATA CLOB not null
)
Почему вы не можете использовать триггеры? Триггер по удалению для регистрации удаляемых строк. Каковы ваши критерии восстановления (из таблицы журналов)? – Annjawn
С или без триггеров, мой вопрос в том, как я могу вставить значения строки в другую таблицу? И при необходимости я хочу получить эту строку из таблицы журналов и вставить ее в ее исходную таблицу. Я пытаюсь найти способ сериализации/десериализации строки. –
Почему вы храните xml как clob? –