Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > INCREMENT FIELD


Автор: Fighter 12.1.2007, 03:11
В Interbase как известно нет поля инкрементного типа. Но это поле можно как то сделать с использованием триггеров и еще чего-то там. Покажите пожалуйста.

Автор: Akella 12.1.2007, 09:18
создаем таблицу
Код

CREATE TABLE GAZ (
    ID    "INT" NOT NULL /* "INT" = INTEGER CHECK ((VALUE >= 0) or (VALUE is NULL) or (VALUE = -1)) */,
    NAME  STRING20 NOT NULL COLLATE PXW_CYRL /* STRING20 = VARCHAR(20) */,
    EXP   BOOL COLLATE PXW_CYRL /* BOOL = VARCHAR(1) DEFAULT 'T' */
);


создаём генератор (он будет хранить уникальное значение)
Код

CREATE GENERATOR GEN_GAZ_ID;


создаем первичный ключ
Код

ALTER TABLE GAZ ADD CONSTRAINT PK_GAZ PRIMARY KEY (ID);


создаём триггер "перед добавлением"
Код

/* Trigger: GAZ_BI */
CREATE TRIGGER GAZ_BI FOR GAZ
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
    NEW.ID = GEN_ID(GEN_GAZ_ID,1); -- новое значение для поля ID, будет сгененрировано функцией GEN_ID
-- но будет сгенерировано в том случае, если ты передашь пустое значение
END

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)