Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.04;
Скачать: CL | DM;

Вниз

Триггеры   Найти похожие ветки 

 
Spawn ©   (2003-07-11 18:10) [0]

Пытаюсь сделать триггер, чтобы имитировать автоинкрементное поле.

Сначала создаю генератор
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

Заранее спасибо.


 
KDS ©   (2003-07-11 18:18) [1]

проблема в знаке ";"
надо использовать 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 ; ^


 
Spawn ©   (2003-07-11 18:51) [2]

А можно ли как нибуть удалить или изменить существующий генератор? При попытке вызвать
DROP GENERATOR DOC_ID пишет что ето невозможно

а что нить связаное с ALTER GENERATOR я не нашел


 
Spawn ©   (2003-07-11 19:31) [3]

Уже разобрался))


 
Spawn ©   (2003-07-11 19:40) [4]

При удалении записи в базе значение генератора нужно самому уменьшать? Если да то как? Вот , к примеру, тако триггер:

CREATE TRIGGER BEF_DEL FOR DOC
ACTIVE BEFORE DELETE
AS
BEGIN
//что тут необходимо написать для уменьшения значений генератора?
END


 
KDS ©   (2003-07-12 12:25) [5]

нет, при удалении уменьшать его НЕ НАДО, хотя реализовать это легко:
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-12 18:24) [6]

Качну когда на счету юудет побольше)) А то у меня метр 6 р). Я пока Interactive SQL юзаю в IBConsole


 
VID ©   (2003-07-12 19:59) [7]

To Spawn: так ты долго будешь мучаться...


 
Zacho ©   (2003-07-14 07:05) [8]

2 Spawn:
Настоятельно рекомендую прочитать статью http://www.ibase.ru/devinfo/generator.htm да и остальные статьи на http://www.ibase.ru/develop.htm стоит почитать.


 
iKS   (2003-07-14 09:55) [9]

Вообще-то, значение гениератора "трогать" не рекомендуется ни при каких обстоятельствах, хоть это и возможно.


 
seregin   (2003-07-14 10:02) [10]

уменьшить можно легко
select gen_id(your_gen, -1) from any_table


 
Johnmen ©   (2003-07-14 10:10) [11]

>seregin (14.07.03 10:02)

Это же на сколько уменьшится ? :)))


 
seregin   (2003-07-14 10:16) [12]

на -1.
не понял, а что не так?


 
Alexandr ©   (2003-07-14 10:18) [13]

ха!
уменьшится на количество отфетченных записей из any_table...
и а вот сколько отфетсчится это сложный вопрос...


 
seregin   (2003-07-14 10:25) [14]

>> Alexandr
здорово!!!!
не задумывался...
ну тогда можно так (тока синтаксис не знаю)

select gen_id(your_gen, -1) first 1 from any_table


 
Alexandr ©   (2003-07-14 10:26) [15]

экспериментатор блин...

select gen_id(your_gen, -1) from RDB$database



Страницы: 1 вся ветка

Текущий архив: 2003.08.04;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
3-10095
LAMER Pro
2003-07-09 09:05
2003.08.04
Как часть транзакции сделать безоткатной?


3-10085
Apolon
2003-07-11 18:18
2003.08.04
Проверка обязательных полей таблиц из базы данных


4-10528
mod
2003-06-03 16:56
2003.08.04
Раскладка клавиатуры


1-10269
zolotov
2003-07-21 15:57
2003.08.04
Проблема с копированием и вырезанием данных в F1Book


3-10131
Apolon
2003-07-15 11:29
2003.08.04
Проверка обязательных полей базы данных отображенных на форме