语法错误MySql触发器:While_Sym
我正在Wamp服务器上用PHP和MySql开发一个小项目。我刚刚发现了SQL触发器的奇妙原理。哼好如果我能用它,那就太好了 事实上,我对以下脚本有一个问题:语法错误MySql触发器:While_Sym,mysql,triggers,Mysql,Triggers,我正在Wamp服务器上用PHP和MySql开发一个小项目。我刚刚发现了SQL触发器的奇妙原理。哼好如果我能用它,那就太好了 事实上,我对以下脚本有一个问题: BEGIN SET @liste = NEW.reponse WHILE LEN(@liste) > 0 BEGIN IF PATINDEX('%,%',@liste) > 0 BEGIN SET @choix = SUBSTRING(@liste,
BEGIN
SET @liste = NEW.reponse
WHILE LEN(@liste) > 0
BEGIN
IF PATINDEX('%,%',@liste) > 0
BEGIN
SET @choix = SUBSTRING(@liste, 0, PATINDEX('%,%', &liste))
INSERT INTO resultat (referendum, choix) VALUES (NEW.id, @choix)
SET @liste = SUBSTRING(@liste, LEN(@choix + ',') + 1, LEN(@liste))
END
END
END
我想在表中插入一条记录后执行此触发器“公投”
。此表中有一个字段“reponse”
,其中包含不同的可能答案。此字段包含此类数据:“是,否,我不知道”
。对于每个新问题,我想在表“Resultat”
中为每个可能的答案插入一条新记录
在我的示例中,有三条新记录:一条用于Yes
,一条用于No
,另一条用于我不知道
我的代码来自互联网上的一个示例,但它不能正常工作。SQL返回一个语法错误,其中包含消息“While_Sym expected”…
我试图在我在互联网上找到的东西后面加上分号,但没有办法…我想你需要这样的东西:
CREATE TRIGGER mytrigger AFTER INSERT
ON Referendum FOR EACH ROW
BEGIN
DECLARE cnt int;
DECLARE str varchar(100);
Set cnt = CHAR_LENGTH(NEW.reponse)
- CHAR_LENGTH(Replace(NEW.reponse,',','')) +1;
WHILE cnt > 0 DO
Set str = SUBSTRING_INDEX(
SUBSTRING_INDEX( New.reponse,',', -cnt)
,',',1);
INSERT INTO resultat (referendum, choix)
VALUES (NEW.id, str);
Set cnt = cnt - 1;
END WHILE;
END;
演示:
一些想法:
MySql中没有
PATINDEX
或LEN
函数,它们来自SQL Server。大多数函数在SQL中都不是标准函数,人们不应该期望在数据库X上工作的函数也应该在数据库Y上工作(反之亦然) 你总是需要检查手册
MySql中的
@variable
和variable
之间存在差异-它们不一样(与SQL Server相反,SQL Server中只有一种变量-->@variable
)。有关
@user\u defined\u variables
和local\u variables
根据您的客户端软件,您可能还需要使用
分隔符xx
命令,例如,在mysql console client或mysql Workbench中,您需要这样的命令来创建一个没有语法错误的触发器:
DELIMITER $$
CREATE TRIGGER mytrigger AFTER INSERT
ON Referend ......
......
......
END;
$$
DELIMITER ;
请将整个错误堆栈添加到您的帖子中。谢谢您的回答。我现在在工作,所以不可能尝试。然而,你给了我非常有用的提示,让我扩展知识,搜索更多关于触发器的信息。实际上,我不知道它们是SQLServer和MySql之间的区别。多谢各位。