Ошибка создания триггера FireBird 1.5.2

Blackpiglet
Дата: 17.10.2005 02:19:33
Из IBExpert создаю триггер для Auto Increment поля ID. Он генерируется в следующем виде:

CREATE TRIGGER NEW_TABLE_BI FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(,1);
END

Но выдаётся ошибка:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 6, char 21.
,.

Может где-то надо прописать функцию GEN_ID() ?

Хотя это вроде встроенная функция.
VirusXP
Дата: 17.10.2005 02:24:50
Blackpiglet

NEW.ID = GEN_ID(,1);

это оригинальный текст??? если да, то надо имя триггера первым параметром писать
VirusXP
Дата: 17.10.2005 02:25:32
вернее не триггера, а генератора
VirusXP
Дата: 17.10.2005 03:06:44
у меня даже пример гдето валялся
CREATE TABLE MAIN_TABLE
(
  NUM_MAIN_TABLE INTEGER NOT NULL,
  INT_LOCAL      INTEGER,
  PRIMARY KEY (NUM_MAIN_TABLE)
);

CREATE GENERATOR GEN_MAIN_TABLE;

SET TERM!!;

CREATE TRIGGER TRIG_MAIN_TABLE FOR MAIN_TABLE
ACTIVE BEFORE INSERT POSITION 0
as
begin
  new.NUM_MAIN_TABLE=gen_id(gen_main_table,1);
end!!

SET TERM ;!!

CREATE TABLE DEL_TABLE
(
  NUM_DEL_TABLE      INTEGER NOT NULL,
  NUM_MAIN_TABLE INTEGER,
  INT_LOCAL      INTEGER,
  PRIMARY KEY (NUM_DEL_TABLE)
);

ALTER TABLE DEL_TABLE ADD FOREIGN KEY (NUM_MAIN_TABLE)
      REFERENCES MAIN_TABLE (NUM_MAIN_TABLE) ON UPDATE CASCADE ON DELETE CASCADE;

CREATE GENERATOR GEN_DEL_TABLE;

SET TERM!!;

CREATE TRIGGER TRIG_DEL_TABLE FOR DEL_TABLE
ACTIVE BEFORE INSERT POSITION 0
as
begin
  new.NUM_DEL_table=gen_id(gen_del_table,1);
end!!

SET TERM;!!

CREATE TABLE NULL_TABLE
(
  NUM_NULL_TABLE INTEGER NOT NULL,
  NUM_MAIN_TABLE INTEGER,
  INT_LOCAL INTEGER,
  PRIMARY KEY (NUM_NULL_TABLE)
);

ALTER TABLE NULL_TABLE ADD FOREIGN KEY (NUM_MAIN_TABLE)
      REFERENCES MAIN_TABLE (NUM_MAIN_TABLE) ON UPDATE CASCADE ON DELETE SET NULL;

CREATE GENERATOR GEN_NULL_TABLE;

SET TERM!!;

CREATE TRIGGER TRIG_NULL_TABLE FOR NULL_TABLE
ACTIVE BEFORE INSERT POSITION 0
as
begin
  new.NUM_NULL_TABLE=gen_id(gen_null_table,1);
end!!

SET TERM ;!!
Гаджимурадов Рустам
Дата: 17.10.2005 03:56:28
Blackpiglet
Из IBExpert создаю триггер для Auto Increment поля ID. Он генерируется в следующем виде:

CREATE TRIGGER NEW_TABLE_BI FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(,1);
END
В окошке, в котором ставишь галочку "создать триггер", на первой вкладке с названием "Генератор" укажи имя генератора.
В твоем случае IBExpert тебе предложит имя GEN_NEW_TABLE_ID.
Если ты ранее создал генератор, то можешь выбрать его из списка.

После указания имени генератора на второй вкладке "Триггер" IBExpert предлоижт тебе корректный текст триггера.
Blackpiglet
Дата: 17.10.2005 08:29:41
Всем спасибо.