Mysql 5.1中的Mysql错误1064-无法成功执行
我试图在Mysql(5.1)中编写触发器,但出现以下错误,请帮助 错误是: SQL错误(1064):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 在第5行的“”附近使用的语法 写入触发器的目的: 我正在编写分配用户的应用程序,我想在更新基本表后,将未分配的Mysql 5.1中的Mysql错误1064-无法成功执行,mysql,triggers,Mysql,Triggers,我试图在Mysql(5.1)中编写触发器,但出现以下错误,请帮助 错误是: SQL错误(1064):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 在第5行的“”附近使用的语法 写入触发器的目的: 我正在编写分配用户的应用程序,我想在更新基本表后,将未分配的usercount存储到IX_branchdetails表中的字段cluster\u count 触发: DELIMITER $$ CREATE TRIGGER upd_trg AFTER UPDATE ON DBNA
usercount
存储到IX_branchdetails
表中的字段cluster\u count
触发:
DELIMITER $$
CREATE TRIGGER upd_trg AFTER
UPDATE ON DBNAME.BASETABLE
FOR EACH ROW
BEGIN
DECLARE m_branchcode INTEGER;
DECLARE cnt INTEGER;
DECLARE cursor_branch CURSOR FOR
SELECT DISTINCT branchcode
FROM ix_branchdetails;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
open cursor_branch;
my_loop: loop
set done = false;
fetch cursor_branch into m_branchcode;
if done then
leave my_loop;
end if;
select count(1) into cnt from (select count(1) from BASETABLE Where IX_BRANCHCODE = m_branchcode) as temp;
update DBANAME.ix_branchdetails set DBANAME.ix_branchdetails.cluster_count = cnt where DBANAME.ix_branchdetails.BRANCHCODE = m_branchcode;
end loop my_loop;
close cursor_branch;
END $$
DELIMITER ;
我没有看到
done
变量的声明:
DECLARE done TINYINT DEFAULT FALSE;
分号(;)是MySQL语句的默认分隔符。要定义过程/函数/触发器,我们通常会看到语句分隔符更改为不出现在语句中的字符串:
DELIMITER $$
CREATE PROCEDURE ...
END$$
DELIMITER ;
如果分隔符没有从分号更改,那么当MySQL在过程/函数/触发器中遇到第一个分号时,它会将其视为语句的结尾,这不是您想要的。您希望MySQL将整个代码块视为一条语句。我没有看到
done
变量的声明:
DECLARE done TINYINT DEFAULT FALSE;
分号(;)是MySQL语句的默认分隔符。要定义过程/函数/触发器,我们通常会看到语句分隔符更改为不出现在语句中的字符串:
DELIMITER $$
CREATE PROCEDURE ...
END$$
DELIMITER ;
如果分隔符没有从分号更改,那么当MySQL在过程/函数/触发器中遇到第一个分号时,它会将其视为语句的结尾,这不是您想要的。您希望MySQL将整个代码块看作一条语句。Add
DELIMITER$$代码>在开始处,在结束处使用相同的分隔符。它有效。非常感谢马哈茂德。更正了我的触发块。添加分隔符$$代码>在开始处,在结束处使用相同的分隔符。它有效。非常感谢马哈茂德。更正了我的触发块。谢谢斯宾塞,描述得很好。谢谢斯宾塞,描述得很好。