【问题标题】:How to use the same variable more than one time in function concat() MySql如何在函数 concat() MySql 中多次使用同一个变量
【发布时间】:2016-12-05 14:59:11
【问题描述】:
DELIMITER $$
CREATE TRIGGER `tr_tblEmployee_Update` BEFORE UPDATE ON `tblEmployee` FOR EACH ROW 
BEGIN

 DECLARE id int; DECLARE OldGender varchar(10); DECLARE NewGender varchar(10); DECLARE NewName varchar(50); DECLARE OldName varchar(50);
 DECLARE OldSalary int; DECLARE NewSalary int; DECLARE OldID_Dep int; DECLARE NewId_Dep int;
 DECLARE AuditString varchar(300);

    SET id = ID_Employee; SET NewGender = Gender; SET NewName = Name; SET NewSalary = Salary; SET NewID_Dep = ID_Dep;
    SET OldGender = Gender; SET OldName = Name; SET OldSalary = Salary; SET OldID_Dep = ID_Dep;

    SET AuditString = concat('Employee with id = ',id,' changed: ')
    IF(OldName<>NewName)
        SET AuditString = concat(AuditString, 'Name from ',OldName,' to ',NewName);
    IF(OldGender<>NewGender)
        SET AuditString = concat(AuditString, ' Gender from ',OldGender,' to ',NewGender);
    IF(OldSalary<>NewSalary)
        SET AuditString = concat(AuditString, ' Salary from ',OldName,' to ',NewName);
    IF(OldDep<>NewDep)
        SET AuditString = concat(AuditString, ' Department from ',OldName,' to ',NewName);

    INSERT INTO tblemployeeaudit(AuditData) VALUES(AuditString);
END
$$
DELIMITER ;

您好,我想多次使用具有相同变量 (AuditString) 的 concat 函数,但每次尝试执行此操作时都会出错。

错误 - #1064 - 您的 SQL 语法有错误;检查手册 对应于正确语法的 MariaDB 服务器版本 在 'IF(OldName!=NewName) 附近使用 SET AuditString = concat(AuditString, 'Name from ',Ol'... at line 12

【问题讨论】:

  • 您使用的是 MySQL 还是 MS SQL Server? (不要标记未涉及的产品。)
  • 也发布错误信息
  • 我正在使用MySql,抱歉我第一次在这里发帖。

标签: mysql


【解决方案1】:

IF(OldName&lt;&gt;NewName) 行前缺少; 分号

同样,您的 IF 语法对我来说看起来不正确。应该是

IF(OldName<>NewName) THEN
    SET AuditString = concat(AuditString, 'Name from ',OldName,' to ',NewName);
END IF;

【讨论】:

  • 非常感谢,我试了 1 个小时,并没有注意到缺少的分号。
【解决方案2】:

这是最终的解决方案,以防其他人遇到与我相同的问题。

分隔符 $$ 在更新tblEmployee 之前为每一行创建触发器tr_tblEmployee_Update
开始

声明 id int;声明 OldGender varchar(10);声明 NewGender varchar(10);声明新名称 varchar(50);声明旧名称 varchar(50); DECLARE OldSalary int; DECLARE NewSalary int; DECLARE OldID_Dep int;声明 NewId_Dep int; DECLARE AuditString varchar(300);

SET id = OLD.ID_Employee; SET NewGender = NEW.Gender; SET NewName = NEW.NAME; SET NewSalary = NEW.Salary;
SET OldGender = OLD.Gender; SET OldName = OLD.NAME; SET OldSalary = OLD.Salary;

SET AuditString = concat('Employee with id = ',id,' changed: ');
IF(OldName<>NewName) THEN
    SET AuditString = concat(AuditString, 'Name from ',OldName,' to ',NewName);
END IF;
IF(OldGender<>NewGender) THEN
    SET AuditString = concat(AuditString, ' Gender from ',OldGender,' to ',NewGender);
END IF;
IF(OldSalary<>NewSalary) THEN
    SET AuditString = concat(AuditString, ' Salary from ',OldSalary,' to ',NewSalary);
END IF;    
INSERT INTO tblemployeeaudit(AuditData) VALUES(AuditString);

结束

【讨论】:

    猜你喜欢
    • 2012-09-25
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多