Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
14-10433
Soft
2003-07-17 15:25
2003.08.04
Господа, а вы все, оказывается преступники.


1-10264
cjiohobaji
2003-07-21 05:05
2003.08.04
кто-нибудь делал отчёты, не с БД а со своих данных, с программы


14-10419
K.o.Z
2003-07-16 20:34
2003.08.04
Кластеры


14-10362
zolotov
2003-07-15 21:13
2003.08.04
Как заменить старую версию F1Book более новой?


7-10464
Alexor
2003-05-22 00:32
2003.08.04
PrintDialog





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский