我使用了MSSQL存储过程和触发器一段时间;对于如何编写更简单的过程,MySQL让我非常疯狂。
为什么我在这个stuoid触发器中出现语法错误?
CREATE TRIGGER set_prio_default BEFORE INSERT ON categories
FOR EACH ROW
BEGIN
set @my_prio := 1;
SET new.prio := @my_prio;
END
事实上,这个TRIGGER是对以下内容的过分说明:
DELIMITER $$
DROP PROCEDURE IF EXISTS `slot08`.`test` $$
CREATE PROCEDURE `slot08`.`test` ()
BEGIN
select 1 + max(prio) from categories INTO @my_prio;
select @my_prio;
END $$
DELIMITER ;
我仍然不明白如何在程序中使用变量。如果我使用DECLARE语句并且变量名称错过@字符我从mysql收到错误告诉我“未知系统变量” - 但是我看到的很多例子都使用了这种语法
我的意思是:
这不起作用
CREATE TRIGGER set_prio_default BEFORE INSERT ON categories
FOR EACH ROW
BEGIN
declare my_prio integer default 1;
set my_prio := 1;
SET new.prio := my_prio;
END
如果我使用@,我会收到语法错误。
有一些提示吗?
谢谢!
答案 0 :(得分:0)
我认为你不得不使用:=运算符。一个简单的等于会做。在存储过程中声明的所有变量都必须以@symbol为前缀。
答案 1 :(得分:0)
DELIMITER $$
CREATE TRIGGER blablabla
BEFORE INSERT ON myStupidTable
FOR EACH ROW
BEGIN
declare my_prio integer;
select 1 + max(prio) from myStupidTable INTO my_prio;
SET new.prio := my_prio;
END $$
DELIMITER ;
到目前为止,MySQL语法错误似乎是一个分隔符问题。
问候
丹尼尔