Относительно простой вопрос. Я пытаюсь выполнить инструкцию и проверить значение до корректировки значения INSERT для триггера firebird. Я видел много примеров, в которых оценивается новое значение, а затем выполняются последующие операторы, но ни один из них не нужен. Легче показать ...Firebird Trigger SQL Validate Query
SET TERM^;
CREATE TRIGGER STOP_PREMIX_INSERT_PRODUCEDD FOR PRODUCEDD ACTIVE
BEFORE INSERT OR UPDATE POSITION 0
AS
BEGIN
IF ('SELECT COUNT(*) FROM RECIPESTEPS rs INNER JOIN RECIPES r on r.RECIPEID=rs.RECIPEID INNER JOIN PRODUCEDH h on h.RECIPEID=r.RECIPEID WHERE h.BATCHID=' || new.BATCHID || ' AND ' || new.SEQUENCENO || '=rs.SEQUENCENO AND ' || new.COMMODITYID || '=rs.COMMODITYID AND rs.NONWEIGHED=17;' > 0) then
new.BATCHID=-1;
END^
SET TERM ;^
Я пытаюсь проверить существование элемента данных в другой таблице до выполнения изменения значения на новой записи.
Обычно IF (new.ID = 0) затем выполняет инструкцию 'blah'; будет работать, но когда я пишу этот триггер, он синтаксически принимается, но когда значение изменяется я получаю следующее сообщение об ошибке:
арифметическое исключение, числовое переполнение или строка усечение строка правой усечения В триггера «STOP_PREMIX_INSERT_PRODUCECEDD ': 6, col: 5
Возможно, я мог бы быть полуколокой, или это может быть просто невозможно, так или иначе, любая помощь будет оценена.
Не знаю, что я знаю Firebird, но похоже, что вы проверяете, больше ли строка SQL больше нуля. Может быть, вам нужно выполнить строку и сравнить результат? –