Текущий архив: 2002.12.09;
Скачать: CL | DM;
ВнизУдаление записей Найти похожие ветки
← →
ruslanyd (2002-11-20 15:05) [0]Hi All!
существует ли в Interbase возможность, например, с помощью триггера вместо реального удаления записи просто прописывать дату удаления в нее?
← →
oss (2002-11-20 15:29) [1]сделай признак - удаленная запись или нет,и вместо у даления проставляй этот признак, тогда и триггеров не надо будет
← →
ruslanyd (2002-11-20 15:35) [2]так ниличие даты удаления и есть признак
просто мне с триггером (если это возможно) пришлось бы делать минимум изменений
← →
Victor_Cr (2002-11-20 15:48) [3]Суть в том, что ты выбираешь все записи не несущие признак удаления, а какой это может быть признак решать тебе.
← →
stone (2002-11-20 15:57) [4]А тип БД какой?
В MS SQL, например, есть триггеры INSTEAD OF
← →
Wolf226 (2002-11-20 16:12) [5]1. Cделай View (обязательно не живой!)
2. Пропиши тригерра BI, BU, BD
3. В BD и делай update поля по признаку.
пример (только здесь признак, а не дата)
CREATE VIEW V_RF_POST(
ID,
NAME,
PRIORITY)
AS
select
ID,
NAME,
priority
from
RF_POST,
rdb$database
where
deleted = 0;
SET TERM ^ ;
CREATE TRIGGER RF_POST_BD
as
begin
update rf_post set deleted = 1 where id = old.id;
end^
CREATE TRIGGER V_RF_POST_BI
as
begin
if (new.id is null) then new.id = gen_id(gen_id_rf_post, 1);
if (new.priority is null) then new.priority=gen_id(gen_priority_rf_post,1);
insert into rf_post (
id,
name,
priority
)
values (
new.id,
new.name,
new.priority
);
end^
CREATE TRIGGER V_RF_POST_BU
as
begin
update rf_post
set id = new.id,
name = new.name,
priority=new.priority
where id = old.id;
end^
SET TERM ; ^
← →
ruslanyd (2002-11-20 16:14) [6]2 Victor_Cr
это все понятно, но проблема не в этом
проблема в том, чтобы устанавливать этот признак на уровне БД
← →
Dr_Mike (2002-11-20 16:53) [7]А зачем на уровне БД ? Какое может быть практическое использование этого ?
Ведь если разобраться, то ИБ в действительности внутри себя поддерживает многоверсионность со сборкой мусора (если не ошибаюсь по умолчанию после 20 000 транзакций) - но зачем пытаться реализовать еще один подобный механизм ?
ИМХО, для критичных данных стоит вести лог - намного перспективнее.
← →
ruslanyd (2002-11-20 17:58) [8]2 Wolf226
это похоже на то, что надо
но после срабатывания триггера RF_POST_BD запись все равно удаляется :(
← →
ruslanyd (2002-11-20 18:36) [9]2 Dr_Mike
>А зачем на уровне БД
в большей степени для унификации
у меня есть поля с датой создания, модификации и удаления записи
дату создания и модификации сделал через триггеры
а удаления не получается, т.к. не знаю как отменить физическое удаление записи в триггере, если, конечно, такое возможно
← →
Dr_Mike (2002-11-21 00:52) [10]в ИБ такие фичи на уровне БД не поддерживаются,
так что наиболее приемлемый вариант (чтобы не вносить изменения в уже готовый код) - это в тригере сохранение удаляемых записей в отдельную таблицу (или иногда бывает предпочтительно просто формировать общий лог)
← →
ruslanyd (2002-11-21 11:45) [11]да, неутешительная инфа
дело в том, что у меня есть режим работы с базой без архивов и с ними, так что отдельные таблицы не подойдут
ладно, всем спасибо
буду курочить программу :)
← →
ЮЮ (2002-11-22 05:51) [12]>так что отдельные таблицы не подойдут
а если её записывать в эту же таблицу снова, но с заполненным полем "Удалено", в триггере "вставить" анализировать это значение, дабы оставить то же значение ключа
Страницы: 1 вся ветка
Текущий архив: 2002.12.09;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.012 c