2009-02-19 27 views
-1

我使用MSSQL存儲過程和觸發器一段時間; MySQL讓我對如何編寫更簡單的過程感到絕對瘋狂。MySQL中的觸發器和存儲過程

爲什麼我在這個如此的類似實體觸發器中出現語法錯誤?

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

在事實這種觸發的oversemplification:

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

請發表您的語法錯誤 – Quassnoi 2009-02-19 11:40:47

回答

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的語法錯誤,經歷了這麼遠是一個分隔符的問題。

問候

丹尼爾

0

我不認爲你必須使用:=運算符。一個簡單的平等會做。在存儲過程中聲明的所有變量都必須以@symbol作爲前綴。

相關問題