Mysql 在触发器中使用局部变量
在此触发器中:Mysql 在触发器中使用局部变量,mysql,sql,Mysql,Sql,在此触发器中: 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 `revis
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
我犯了这个错误
架构创建失败:SQL语法中有错误;检查
右边是与MySQL服务器版本对应的手册
使用near'DECLARE VAR_NEW_VERSION INT;
设置VAR_NEW_VERSION=VAR_P_VERSION+1;
“在第23行:
如果我删除
DECLARE VAR_NEW_VERSION INT;
SET VAR_NEW_VERSION = VAR_P_VERSION + 1
或者将局部变量更改为会话变量(以@开头),则代码将正常运行
Q.为什么会发生这种情况?所有声明都应该在触发器的开头
这不是一个C++语言,可以混合声明和语句,但更像C,所有声明都必须在所有语句之前完成。
< P>所有声明都应该在触发器的开始。< /P>这不是C++语言,可以混合声明和语句,但更像C,所有声明都必须在所有语句之前完成。
< P>问题在语法中。这是不正确的所有声明必须在BEGIND…END子句的开头。您可以在代码中的任何位置设置用户变量。问题在于语法。这是不正确的 所有声明必须在BEGIND…END子句的开头。可以在代码中的任何位置设置用户变量