2016-12-05 23 views
1
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関数を使用したいのですが、試行するたびにエラーが発生します。それをするために。関数concat()で同じ変数を複数回使用する方法

エラー - #1064 - SQL構文に誤りがあります。右側の構文 の近くに使用するマニュアルの を確認してください。SET AuditString = concat(AuditString、 'Name from'、Ol '... at line 12

+0

あなたは、MySQLやMS SQL Serverを使用していますか? (含まれていない製品にはタグを付けないでください) – jarlh

+0

エラーメッセージも投稿してください – Rahul

+0

私はMySqlを使用しています。 –

答えて

0

あなたにもラインIF(OldName<>NewName)

;セミコロンが不足している、あなたのIF構文は、私には間違って見えます。それは、むしろあるべき

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

ありがとうございました。私は1時間試していて、行方不明のセミコロンに気付かなかった。 –

0

誰かが私と同じ問題を抱えている場合に備えて、これは最終的な解決策です。

DELIMITER $$

DECLARE番号INTをBEGIN EACH ROW FOR tblEmployee ON更新前
をTRIGGER tr_tblEmployee_Updateを作成します。 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;宣言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); 

END

関連する問題