![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Триггеры [D7, IB6.x]
Spawn © (2003-07-11 18:10:00)Пытаюсь сделать триггер, чтобы имитировать автоинкрементное поле.
Сначала создаю генератор
CREATE GENERATOR DOC_ID
Задаю начальное значений
SET GENERATOR DOC_ID TO 1
При попытке создать триггер выдает ошибку Unexpected end of command. В чем ошибка?
Триггер:
CREATE TRIGGER BEF_INS_DOC FOR DOC
ACTIVE BEFORE INSERT AS
BEGIN
NEW.ID=GEN_ID(DOC_ID,1);
END
Заранее спасибо.
Alexandr (2003-07-14 10:26:00) [1]экспериментатор блин...
select gen_id(your_gen, -1) from RDB$database
seregin (2003-07-14 10:25:00) [2]>> Alexandr
здорово!!!!
не задумывался...
ну тогда можно так (тока синтаксис не знаю)
select gen_id(your_gen, -1) first 1 from any_table
Alexandr (2003-07-14 10:18:00) [3]ха!
уменьшится на количество отфетченных записей из any_table...
и а вот сколько отфетсчится это сложный вопрос...
seregin (2003-07-14 10:16:00) [4]на -1.
не понял, а что не так?
Johnmen (2003-07-14 10:10:00) [5]>seregin (14.07.03 10:02)
Это же на сколько уменьшится ? :)))
seregin (2003-07-14 10:02:00) [6]уменьшить можно легко
select gen_id(your_gen, -1) from any_table
iKS (2003-07-14 09:55:00) [7]Вообще-то, значение гениератора "трогать" не рекомендуется ни при каких обстоятельствах, хоть это и возможно.
Zacho (2003-07-14 07:05:00) [8]2 Spawn:
Настоятельно рекомендую прочитать статью http://www.ibase.ru/devinfo/generator.htmда и остальные статьи на http://www.ibase.ru/develop.htmстоит почитать.
VID (2003-07-12 19:59:00) [9]To Spawn: так ты долго будешь мучаться...
Spawn (2003-07-12 18:24:00) [10]Качну когда на счету юудет побольше)) А то у меня метр 6 р). Я пока Interactive SQL юзаю в IBConsole
KDS (2003-07-12 12:25:00) [11]нет, при удалении уменьшать его НЕ НАДО, хотя реализовать это легко:
NEW.ID=GEN_ID(DOC_ID, -1);
это грозит тем что при удалении 5-ой записи из 9 -ти имеющихся
счетчик откатит свое значение на 8-ку и при следующем добавлении возникнет еще одна 9!-я запись! Усек?
Ну и пусть себе будет не сплошной автоинкремент,а с дырками типа 1,2,4,5,7... ведь это поле нужно всего лишь для обеспечения уникальности записей для внутренней работы с ними (Удаление, правка...)
И вообще прошло то время, когда писали DDL скрипты в ДБЭксплорере.
Качни себе IB Expert отсюдава www.ibexpert.com и забудешь про ручную работу. Там все это делается визуально!
Spawn (2003-07-11 19:40:00) [12]При удалении записи в базе значение генератора нужно самому уменьшать? Если да то как? Вот , к примеру, тако триггер:
CREATE TRIGGER BEF_DEL FOR DOC
ACTIVE BEFORE DELETE
AS
BEGIN
//что тут необходимо написать для уменьшения значений генератора?
END
Spawn (2003-07-11 19:31:00) [13]Уже разобрался))
Spawn (2003-07-11 18:51:00) [14]А можно ли как нибуть удалить или изменить существующий генератор? При попытке вызвать
DROP GENERATOR DOC_ID пишет что ето невозможно
а что нить связаное с ALTER GENERATOR я не нашел
KDS (2003-07-11 18:18:00) [15]проблема в знаке ";"
надо использовать SET TERM так
SET TERM ^ ;
CREATE TRIGGER BEF_INS_DOC FOR DOC
ACTIVE BEFORE INSERT AS
BEGIN
NEW.ID=GEN_ID(DOC_ID,1);
END
^
SET TERM ; ^