2013-07-01 8 views
0

Итак, я пытаюсь создать триггер, который будет выполняться только при обновлении определенного столбца в таблице. В рассматриваемой таблице отслеживается колонка, о которой идет речь, это track.track_hits. Я хочу сделать это, если это значение изменится, тогда оно вставляет значение в таблицу с именем play_log. Вставка должна быть track_id из дорожки и временной метки.Ошибка MySQL IF Statement в триггере

Код, который я сделал до сих пор, ниже, но он не работает, как его можно исправить?

CREATE TRIGGER pi_play AFTER UPDATE ON track 
FOR EACH ROW 
BEGIN 
      if :new.track_hits != :old.track_hits 
      then 
    INSERT INTO play_log (track_id,access_time) 
    VALUES (NEW.track_id, NOW()) 
      end if; 
END; 

ответ

0

NEW и OLD не нужно : спереди. Кроме того, при создании триггеров вам может потребоваться изменить разделитель. Если вы не изменяете разделитель, ваш оператор создания триггера может быть разорван раньше.

Вот как я бы это сделать:

delimiter | 

create trigger pi_play after update on track 
for each row 
begin 
    if new.track_hits != old.track_hits then 
    insert into play_log(track_id, access_time) values (new.track_id, now()); 
    end if; 
end| 

delimiter ; 

Вот скрипка, показывая его в действии: http://sqlfiddle.com/#!2/3d99d/1 Обратите внимание, что я изменил разделитель в окне схемы для | вместо стандартного ;. Поскольку SQL использует JDBC, а JDBC не принимает команду DELIMITER, я выбрал разделитель.

+0

в Oracle, вам нужен двоеточие (:) – Randy

+0

это хорошо работает благодаря alot @jtseng –