1

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

错误是:

SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 '' 附近使用正确的语法。

编写触发器的目的:

我正在编写分配用户的应用程序,并且我想将未分配usercount的字段存储cluster_countIX_branchdetails表中。更新基表后。

扳机:

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 ;
4

1 回答 1

1

我没有看到done变量的声明:

DECLARE done TINYINT DEFAULT FALSE;

分号 (;) 是 MySQL 语句的默认分隔符。要定义过程/函数/触发器,我们通常会看到语句分隔符更改为未出现在语句中的字符串:

DELIMITER $$

CREATE PROCEDURE ...

END$$

DELIMITER ;

如果分隔符没有从分号更改,那么当 MySQL 在您的过程/函数/触发器中遇到第一个分号时,它会将其视为语句的结尾,这不是您想要的。您希望 MySQL 将整个代码块视为单个语句。

于 2013-01-30T06:55:10.010 回答