2015-08-13 3 views
0
delimiter // 
CREATE TRIGGER trig AFTER INSERT ON table0 FOR EACH ROW 
BEGIN 
    CREATE TEMPORARY TABLE temp (SELECT t1.col1,t1.Col2,t2.col3,t3.col4,t4.col5 FROM (table1 AS t1 JOIN table2 AS t2 ON t1.col1 = t2.col3... etc) WHERE t1.condition = NEW.condition); 
    INSERT INTO table5 VALUES (NULL,CURRENT_TIMESTAMP(),0,0,NULL,NULL,NULL,NEW.condition, SELECT GROUP_CONCAT("\"",someColumn - 1,",",50,",",someColumn2,",",30,",",someColumn3,"\"" SEPARATOR ';') FROM temp); 
    DROP temp; 
END;// 
delimiter ; 

Ошибка теперьMYSQL SELECT, INSERT внутри триггера

ERROR 1064 (42000): У вас ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «SELECT CONCAT (« \ »», someColumn-1, «,», 50, «,», someColumn2, «,», 30, », someColu» в строке 4

Он получает обрезается на someColu из someColumn3

Спасибо за ваше время.

+1

Какая ошибка, с которой вы столкнулись? – Pavan

+0

Укажите, пожалуйста, точное сообщение об ошибке. – SarathChandra

+0

Зачем вам создавать временную таблицу внутри триггера? –

ответ

1

Вы, кажется, пропустить разделителей строк. вам нужно, чтобы добавить их.

delimiter // 
CREATE TRIGGER upd_check BEFORE UPDATE ON account 
FOR EACH ROW 
BEGIN 
    IF NEW.amount < 0 THEN 
     SET NEW.amount = 0; 
    ELSEIF NEW.amount > 100 THEN 
     SET NEW.amount = 100; 
    END IF; 
END;// 
delimiter ; 

Обязательно изменить разделитель на нечто, отличное от ';', чтобы выполнение не заканчивалось в t он посередине создаёт оператор триггера.

Здесь мы сменим разделитель на '//' непосредственно перед созданием триггера и сменим его на ';' немедленно.

Смежные вопросы