2017-06-07 55 views
0

我在phpmyadmin中創建觸發器時遇到問題。下面是我的語法:創建觸發器中的問題phpmyadmin

DECLARE n_ubicacion VARCHAR(45) DEFAULT ''; 

IF (OLD.id_ubicacion <> NEW.id_ubicacion) THEN 
SELECT ubicacion INTO n_ubicacion FROM ubicacions WHERE id = NEW.id_ubicacion LIMIT 1; 
END IF; 

INSERT INTO historico_equipos(usuario, id_equipo, estado, ubicacion, empleado, f_asignacion, created_at) VALUES (CURRENT_USER(), NEW.id, NEW.id_estado, n_ubicacion, NEW.id_empleado, NEW.f_asignacion, CURRENT_DATE()) 

我不知道問題出在哪裏。在phpmyadmin中顯示下一個錯誤:

'DECLARE n_ubicacion VARCHAR(45)DEFAULT''附近的語法錯了。 IF(OLD.id_ubicacion <> NEW.id_ubicacion)THEN'

謝謝。

回答

0
  1. 檢查DECLARE語句上面的觸發器內是否存在任何其他語句。如果是這樣,那麼它可能會拋出錯誤。

  2. 檢查您的分隔符。默認情況下,MySQL的分隔符是';'。因此,在看到第一個';'時,您的查詢將會中斷。因此在創建觸發器之前使用其他分隔符。

實施例:

DELIMITER // 

CREATE TRIGGER ... 
BEGIN 
DECLARE n_ubicacion VARCHAR(45) DEFAULT ''; 
IF (OLD.id_ubicacion <> NEW.id_ubicacion) THEN 
    SELECT ubicacion INTO n_ubicacion FROM ubicacions WHERE id = 
             NEW.id_ubicacion LIMIT 1; 
END IF; 
INSERT INTO historico_equipos(usuario, id_equipo, estado, ubicacion, empleado, f_asignacion, created_at) VALUES (CURRENT_USER(), NEW.id, NEW.id_estado, n_ubicacion, NEW.id_empleado, NEW.f_asignacion, CURRENT_DATE()) 
END// 

然後再次改變DELIMITER爲默認值。

DELIMITER ;

+0

我在phpmyadmin觸發器的定義字段中配置它。我在語法結尾添加了'DELIMITER //'和'DELIMITER;',但它顯示了相同的錯誤。 –