【问题标题】:Issue in create trigger phpmyadmin创建触发器 phpmyadmin 中的问题
【发布时间】:2017-06-07 19:12:42
【问题描述】:

我在 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'' 附近的语法有问题;如果(OLD.id_ubicacion NEW.id_ubicacion)那么'

谢谢。

【问题讨论】:

    标签: mysql triggers phpmyadmin


    【解决方案1】:
    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 ;

    【讨论】:

    • 我在 phpmyadmin 触发器的定义字段中配置它。我在语法末尾添加了DELIMITER //DELIMITER ;,但它显示了相同的错误。
    猜你喜欢
    • 2019-10-24
    • 2018-03-04
    • 2011-02-15
    • 2015-10-14
    • 2017-08-27
    • 2015-12-02
    • 1970-01-01
    相关资源
    最近更新 更多