Страница 1 из 1

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

Добавлено: 01 авг 2007, 13:58
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 работать не очень хочется.

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

Добавлено: 01 авг 2007, 14:12
stix-s
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 работать не очень хочется.
по диагонали читал, заодно посмотри, что такое триггеры

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

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

Добавлено: 01 авг 2007, 14:30
Anark1
Ошибка среды. вопрос закрыт.