在mysql中声明PLSQL触发器中的变量

时间:2014-09-28 13:04:03

标签: mysql triggers

我正在为MySQL数据库编写PLSQL触发器。我试图声明变量。所以我在触发器中写了一个声明块。这是我的以下代码

CREATE TRIGGER leave_approve_trigger 
AFTER UPDATE ON leave_status
FOR EACH ROW
DECLARE    //Syntax error
current_id integer;
BEGIN
if NEW.status == 'APPROVED'
THEN
select id into current_id from leave_request_table;
insert into update_table values(current_id);
ENDIF;
END;

我得到的错误是mysql版本5.5.0的语法错误。我们可以实际声明变量吗?提前致谢

2 个答案:

答案 0 :(得分:1)

MySQL的程序语法略有不同,你必须改变一些行:

  • 声明块必须在代码开始之后。
  • ==运算符,但高呼=
  • ENDIF;必须改为END IF;
  • 所有块必须以更改语句的分隔符开始,最后还原它。
  • 如果字段名称是保留字,则可以用`括起来以避免语法错误。

以下是代码:

DELIMITER $$

CREATE TRIGGER leave_approve_trigger 
AFTER UPDATE ON leave_status
FOR EACH ROW
BEGIN
    DECLARE current_id int;

    if NEW.`status` = 'APPROVED' THEN
        select id into current_id from leave_request_table;
        insert into update_table values(current_id);
    END IF;

END$$

DELIMITER ;

答案 1 :(得分:1)

我认为MySQL版本会更像这样:

delimiter $$

CREATE TRIGGER leave_approve_trigger AFTER UPDATE ON leave_status
FOR EACH ROW
BEGIN
    if NEW.status = 'APPROVED' THEN
        insert into update_table 
             select id
             from leave_request_table;
    END IF;
END;

delimiter ;

顺便说一下,你不需要Oracle或MySQL中的变量。只需使用insert . . . select

我认为您还希望匹配leave_request_table中的特定行,但您的触发器不会这样做。