powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Прошу помощи с триггером.
5 сообщений из 5, страница 1 из 1
Прошу помощи с триггером.
    #38618069
DelphiCoder_1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую уважаемых коллег.

Решил использовать в новой БД на FB 2.5 триггеры (не только для автогенерации идентификаторов), но опыта в них у меня маловато. Написал в скрипте создания ряд триггеров. При выполнении скрипта из FlameRobin валится с ошибкой 104 вот этот триггер:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create TRIGGER NEWFINANCESOURCE2 FOR FINANCESOURCES active after insert AS
DECLARE variable DOCID INTEGER;
declare variable MATID INTEGER;
begin
 INSERT INTO DOCUMENTS (D_TYPE, D_NUMBER, D_DATE, D_FINANCESOURCE)
  VALUES (0, 'Остаток ('||New.S_NAME||')', CAST ('NOW' AS DATE), NEW.S_ID)
  RETURNING D_ID INTO :DOCID;
 FOR select m_id from MATERIALNOMENCLATURE into :MATID
  DO begin
      INSERT INTO MATERIALGOING (G_MATERIAL, G_COUNT, G_DOCUMENT) VALUES (:MATID, 0, :DOCID);
     END;
END^ 



Прошу подсказать, корректен ли синтаксис этого триггера (без учета названия таблиц)? Я пытаюсь при создании записи в таблице DOCUMENTS пробежать таблицу MATERIALNOMENCLATURE и создать по числу записей в ней записи в таблице MATERIALGOING. Годится ли такой подход для этой задачи, или надо написать как-то по-другому?
...
Рейтинг: 0 / 0
Прошу помощи с триггером.
    #38618081
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiCoder_1980> валится с ошибкой 104 вот этот триггер:

Текст ошибки-то приведи полный.
А-то навскидку ошибку синтаксиса не видно.

> FOR select m_id from MATERIALNOMENCLATURE into :MATID
> DO begin
> INSERT INTO MATERIALGOING (G_MATERIAL, G_COUNT, G_DOCUMENT)
> VALUES (:MATID, 0, :DOCID);
> END;

Такое лучше делать не for-select-ом, а простым запросом Insert Into Select From.

> Годится ли такой подход для этой задачи, или надо написать как-то по-другому?

Для постановки-то годится, но надо саму обсуждать, ИМХО.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прошу помощи с триггером.
    #38618086
DelphiCoder_1980
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Рустам, спасибо за ответ. Косяк нашёлся, но сообщение об ошибке было неинформативным и указывало на последний END.

Код: sql
1.
END;



Точки с запятой после первого END быть не должно. Убрал её - и всё пошло.

авторТакое лучше делать не for-select-ом, а простым запросом Insert Into Select From.

Что-то до меня никак не дойдёт, как это может выглядеть. Записей в селекте будет много, а насколько я понимаю, Insert into select from применяется, когда селект возвращает единственную запись.
...
Рейтинг: 0 / 0
Прошу помощи с триггером.
    #38618093
Sasha_Portnoy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наоборот, по возможности юзай insert into as select from
...
Рейтинг: 0 / 0
Прошу помощи с триггером.
    #38618105
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DelphiCoder_1980> указывало на последний END.
DelphiCoder_1980> Точки с запятой после первого END быть не должно

Ну, я тоже на это сразу подумал.
Но сервер подсказывает "последний оператор" - мог бы и сам догадаться.

> Что-то до меня никак не дойдёт, как это может выглядеть

Я могу, конечно, готовый запрос тебе написать.
Но он настолько примитивный, что лучше давай сам.

> Записей в селекте будет много, а насколько я понимаю,
> Insert into select from применяется, когда селект возвращает единственную запись.

Нет, оператор допускает множественную вставку
(в отличие от обычного Insert Values на данный момент).
Соответственно, поскольку записей много - лучше
использовать его, чем гнать "курсор", хотя разница
и будет не очень большая (в Firebird), скорее всего.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Прошу помощи с триггером.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]