Страница 1 из 1
Триггеры
Добавлено: 21 авг 2006, 13:56
Dr0n
Доброго времени суток, господа БД-шники.
Возник вопрос при создании тригера:
Необходимо, чтобы при добавлении записи в таб. Provodka при, вставке кол-ва, товаров., выполнялась проверка в табл. new_table в колонке kol_vo (должно быть меньше либо равно)…
Код: Выделить всё
ALTER TRIGGER provodka_bi0
active before insert position 0
AS
DECLARE VARIABLE t integer;
begin
t=(select KOL_VO from new_table where new_table.id_tovara=id_tovara);
if(new.kol<=t)
then
begin
POST_EVENT 'NEW_ORDER';
end
end
причем в режиме отладки все работает так как надо(IBEXPERT ), а при компиляции пишет такую гадость:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Subselect illegal in this context.
Помогите плиз разобраться.
Добавлено: 21 авг 2006, 14:01
CyberMax
Тебе же написали - "подзапросы здесь недопустимы". По твоей проблеме:
http://www.sql.ru/forum/actualthread.aspx?tid=241052
Добавлено: 21 авг 2006, 15:02
Dr0n
Спасибо все что необходимо нашел
было с ошибкой:
Код: Выделить всё
t=(select KOL_VO from new_table where new_table.id_tovara=id_tovara)
переделал на:
Код: Выделить всё
select new_table.id_tovara from new_table where new_table.id_tovara=new.id_tovara into t;
!!!синтаксис языка SQL в тригеррах
Добавлено: 21 авг 2006, 16:17
Dr0n
Код: Выделить всё
CREATE trigger provodka_bi0 for provodka
active before insert position 0
AS
DECLARE VARIABLE tres integer;
begin
select new_table.kol_vo from new_table where new_table.id_tovara=id_tovara into tres;
if(new.kol<tres)then
update new_table set new_table.kol_vo=(tres-new.kol) where new_table.id_tovara=id_tovara;
end
такая вот ошибка
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
TRES.
At line 8, column 40.
не видит он почемуто локальную переменную TRES.
Почему?
Добавлено: 21 авг 2006, 17:23
CyberMax
Может быть через двоеточие tres в апдейте писать...
Добавлено: 21 авг 2006, 17:39
kdv
и еще помнить надо, что теоретически select into может
а) ничего не вернуть (null)
б) вернуть null как значение столбца считанной записи
Добавлено: 21 авг 2006, 17:51
Dr0n
CyberMax писал(а):Может быть через двоеточие tres в апдейте писать...
точно двоеточие, спасибо все получилось

Добавлено: 23 авг 2006, 10:29
Dr0n
Исче один вопрос по этой - же теме в вдогонку...
Существует ли команда для завершения работы триггера, в определенном месте (как EXIT в процедурах)?
Просто необходимо, при добавлении строки в табл., проверять, сущ. ли такая строка, если
1)нет (не существует), то далее продолжаем работу триггера, т.е он добавляет введенную строку в табл.,
2)да (существует), то в существующею строку обновить согласно введенной. Завершить работу триггера. И НЕ ДАТЬ ДОБОВЛЯТЬ ЭТУ СТРОКУ В ТАБЛИЦУ ЦЕЛИКОМ
Извиняйте если не точно объяснил
Добавлено: 23 авг 2006, 11:02
kdv
exit и есть, посмотри еще
www.ibase.ru/devinfo/testiu.htm
там примеры обновления/вставки по условию.
Добавлено: 23 авг 2006, 12:49
Merlin
Dr0n писал(а):Исче один вопрос по этой - же теме в вдогонку...
Мил человек, а чего бы тебе не почитать разА соответствующие главы в Language Reference и Data Definition Guide?
Добавлено: 23 авг 2006, 17:28
Dr0n
Merlin писал(а):
Мил человек, а чего бы тебе не почитать разА соответствующие главы в Language Reference и Data Definition Guide?
Да уж не обессудьте, что задал вопрос, и не прочитал документацию. Думаю рейтинг форума от этого не упадет.
Спасибо, тебе добрый человек, как раз то что необходимо.