Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.007 c
1-28068
neodiX
2002-11-27 14:37
2002.12.09
Потоки - возможно ли?


14-28228
Suprime
2002-11-14 21:34
2002.12.09
Нужно обойти


4-28334
riser
2002-10-26 17:56
2002.12.09
Сравнить реестр


14-28250
V-A-V
2002-11-18 11:06
2002.12.09
Написание хелпов


1-27994
ЮРИЙ_К
2002-11-29 15:55
2002.12.09
Отловить на Гриде клик правой кнопки мыша ???





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский