Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 5.1中的Mysql错误1064-无法成功执行_Mysql_Triggers - Fatal编程技术网

Mysql 5.1中的Mysql错误1064-无法成功执行

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

我试图在Mysql(5.1)中编写触发器,但出现以下错误,请帮助

错误是:

SQL错误(1064):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 在第5行的“”附近使用的语法

写入触发器的目的:

我正在编写分配用户的应用程序,我想在更新基本表后,将未分配的
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$$在开始处,在结束处使用相同的分隔符。它有效。非常感谢马哈茂德。更正了我的触发块。添加
分隔符$$在开始处,在结束处使用相同的分隔符。它有效。非常感谢马哈茂德。更正了我的触发块。谢谢斯宾塞,描述得很好。谢谢斯宾塞,描述得很好。