Первичный ключ и автоинкрементность поля

Модераторы: kdv, CyberMax

Ответить
Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Первичный ключ и автоинкрементность поля

Сообщение Anark1 » 01 авг 2007, 13:58

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

Таблица

Код: Выделить всё

MY_TABLE [ID INTEGER NOR NULL , ... ]
Генератор

Код: Выделить всё

CREATE GENERATOR GEN_MY_TABLE_ID;
SET GENERATOR GEN_MY_TABLE_ID TO 0;
Триггер

Код: Выделить всё

CREATE TRIGGER TR_MY_TABLE_BI FOR MY_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_CARDS_ID, 1);
END
Условие первичного ключа - NOT NULL, но в таком случае не сможет выполняться триггер - условие IF (NEW.ID IS NULL).
Как быть в таком случае. Читал статью о генераторах. Через SELECT работать не очень хочется.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Re: Первичный ключ и автоинкрементность поля

Сообщение stix-s » 01 авг 2007, 14:12

Anark1 писал(а):Проблема такая. Необходимо, чтобы поле первичного ключа было автоинкрементным.

Таблица

Код: Выделить всё

MY_TABLE [ID INTEGER NOR NULL , ... ]
Генератор

Код: Выделить всё

CREATE GENERATOR GEN_MY_TABLE_ID;
SET GENERATOR GEN_MY_TABLE_ID TO 0;
Триггер

Код: Выделить всё

CREATE TRIGGER TR_MY_TABLE_BI FOR MY_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(GEN_CARDS_ID, 1);
END
Условие первичного ключа - NOT NULL, но в таком случае не сможет выполняться триггер - условие IF (NEW.ID IS NULL).
Как быть в таком случае. Читал статью о генераторах. Через SELECT работать не очень хочется.
по диагонали читал, заодно посмотри, что такое триггеры

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Re: Первичный ключ и автоинкрементность поля

Сообщение Anark1 » 01 авг 2007, 14:22

stix-s писал(а): по диагонали читал, заодно посмотри, что такое триггеры
Читал достаточно. С точки зрения теории все выглядит верно, где то даже видел аналогичный код. Но при попытке Commit получаю ошибку.
Может быть все таки растолкуешь?

Anark1
Сообщения: 26
Зарегистрирован: 28 июн 2007, 00:52

Сообщение Anark1 » 01 авг 2007, 14:30

Ошибка среды. вопрос закрыт.

Ответить