Триггеры и хранимые процедуры в MySQL - PullRequest
0 голосов
/ 19 февраля 2009

Некоторое время я использовал хранимые процедуры и триггеры MSSQL; MySQL сводит меня с ума от того, как написать даже более простую процедуру.

Почему я получаю синтаксическую ошибку в этом так называемом триггере?

CREATE TRIGGER set_prio_default BEFORE INSERT ON categories
FOR EACH ROW
BEGIN
  set @my_prio := 1;
    SET new.prio := @my_prio;
END

На самом деле этот ТРИГГЕР является чрезмерным упрощением:

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 голосов
/ 19 февраля 2009

Эй, нашел ответ. Надеюсь, что люди с таким небольшим опытом, как я, в процедурах 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, до сих пор возникавшие, были проблемой разделителя.

Привет

Daniel

0 голосов
/ 19 февраля 2009

Я не думаю, что вы должны использовать оператор: =. Простые равные сделают. Все переменные, объявленные внутри хранимой процедуры, должны иметь префикс @symbol.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...