SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.04.2011 20:49:12

rifler
Участник
Зарегистрирован: 03.05.2010
Сообщений: 2

Ошибка в написании триггера

в таблице есть несколько полей, в том числе interf_id, interf_level и parent_id (указывает на предка)
Так вот, при вставке нужно высчитывать значение interf_level на основе предка + 1;

Пробовал несколькими способами:

CREATE TRIGGER `dbname`.`before_insert_interfaces`
BEFORE INSERT ON `interfaces`
FOR EACH ROW SELECT interf_level+1 AS new_level INTO new.interf_level FROM interfaces WHERE interf_id = new.parent_id;

Пишет - ERROR 1327 (42000): Undeclared variable: new

Пробовал так:
CREATE TRIGGER `dbname`.`before_insert_interfaces`
BEFORE INSERT ON `interfaces`
FOR EACH ROW SET new.interf_level = SELECT interf_level+1 AS new_level FROM interfaces WHERE interf_id = new.parent_id;

Пишет - ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

Как мне реализовать триггер?

Неактивен

 

#2 18.04.2011 01:28:06

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Ошибка в написании триггера

Это нужно внутри триггера сделать несколько операций (придется создать специальную переменную; new.колонка для этого не подходит). Для понадобятся BEGIN ... END, а также смена разделителя.


DELIMITER $

CREATE TRIGGER before_insert_interfaces
BEFORE INSERT ON interfaces
FOR EACH ROW
BEGIN
    DEFINE lvl INT;
    SELECT interf_level+1 FROM interfaces WHERE interf_id = new.parent_id INTO lvl;
    SET new.interf_level = lvl;
END$

DELIMITER ;
 


Правда, скорее всего, MySQL не даст сделать триггер, в котором обращаются к той же таблице.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson