在此触发器中:
CREATE TRIGGER `after_insert_normas_revision`
AFTER INSERT ON `normas_revision` FOR EACH ROW
BEGIN
DECLARE VAR_P_RHID INT;
DECLARE VAR_P_VERSION INT;
SELECT MAX(a.`rhID`)
INTO VAR_P_RHID
FROM `revision_history` a
WHERE a.nID = new.`nID`;
IF VAR_P_RHID IS NULL THEN
SET VAR_P_VERSION = 0;
ELSE
SELECT `version`
INTO VAR_P_VERSION
FROM `revision_history` a
WHERE a.`rhID` = VAR_P_RHID;
END IF;
DECLARE VAR_NEW_VERSION INT;
SET VAR_NEW_VERSION = VAR_P_VERSION + 1;
INSERT INTO `revision_history`
(`revID`, `nID`, `userID`, `timestamp`,
`prev_rhID`, `version`, `action`, `comment`)
VALUES
(new.`revID`, new.`nID`, new.`userID`, CURRENT_TIMESTAMP, VAR_P_RHID, VAR_NEW_VERSION, 'UPDATE', new.`_rev_comment`);
END
我收到此错误
Schema Creation Failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE VAR_NEW_VERSION INT; SET VAR_NEW_VERSION = VAR_P_VERSION + 1; ' at line 23:
如果我删除
DECLARE VAR_NEW_VERSION INT;
SET VAR_NEW_VERSION = VAR_P_VERSION + 1
或者将局部变量更改为 session 变量(前面加上@),然后代码就可以正常运行了。
<小时/>问。为什么会出现这种情况?
最佳答案
问题出在语法上。这是不正确的。
所有声明必须位于 BEGIND...END 子句的开头。您可以在代码中的任意位置设置用户变量。
关于mysql - 在触发器中使用局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496579/