MySQL中的触发器和存储过程

时间:2009-02-19 11:25:23

标签: mysql stored-procedures

我使用了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

如果我使用@,我会收到语法错误。

有一些提示吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你不得不使用:=运算符。一个简单的等于会做。在存储过程中声明的所有变量都必须以@symbol为前缀。

答案 1 :(得分:0)

嘿,找到了答案。希望在MySQL程序中与我一样经验不足的人可以避免花费我在同一问题上花费的时间。 工作:

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语法错误似乎是一个分隔符问题。

问候

丹尼尔