Запись нужно удалить, но данные терять не хочется - что делать?
Нужно ввести в таблицу дополнительную колонку-выключатель, например так:
alter table my_tab
add is_active number
default 1
;
Обычно мы используем не менее двух схем (пользователей) базы данных:
- схема-владелец;
- схема-публикация.
Односхемное решение, когда среднему слою (PHP, APEX, иные среды Web программирования) дается доступ прямо к таблицам, мы не рассматриваем. Так поступать просто нельзя.
Соответственно, мы оборачиваем таблицы схемы-владельца представлениями, на которые выдаем схеме-публикации необходимые права:
create view my_vi
as
select column_1, column_2 ...
from my_tab
;
grant select, insert, update on my_vi to <имя_схемы_публикации>
;
После добавления в исходную таблицу my_tab поля-выключателя is_active нам достаточно добавить в экранирующее представление условие проверки состояния этого выключателя:
create view my_vi
as
select column_1, column_2 ...
from my_tab
where is_active = 1
;
После этого в процедуре/процессе удаления записи физический delete меняется на update... set is_active = 0. Данные в таблице сохранены, но никуда в выборки они не пойдут. При необходимости их можно будет восстановить.
Это очень простое решение. В одной из последующих заметок я планирую рассказать о гораздо более изощренном применении условия where в экранирующем представлении.