2012-07-06 104 views
0

我有這樣的觸發器:SQL 5.1觸發語法錯誤

CREATE TRIGGER `VerficiaDispon` BEFORE INSERT ON `ordini` 
FOR EACH 
ROW 
BEGIN 
DECLARE temp INT 

SET temp = (SELECT disponibili FROM motoinstock 
      WHERE Moto = new.Moto_Comprata 
       AND Concessionario = new.Concessionario_Vendita); 

IF temp = 0 OR temp IS NULL THEN SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'Moto non disponibile'; 

END IF ; 

SELECT acquisti 
INTO temp 
FROM clienticoncessionari 
WHERE cliente = new.Cod_Cliente 
AND concessionario = new.Concessionario_Vendita; 

IF temp %2 =1 THEN SET new.Prezzo_Vendita = (new.Prezzo_Vendita * 0.9) ; 

END IF ; 

END; 

,我不能讓它在SQL 5.1工作。它給我一個錯誤的第7行。我嘗試選擇X到temp,設置temp =(...),但似乎沒有任何工作。 我找不到sintax錯誤,有人可以幫我嗎?它必須是sql 5.1

+0

我知道它應該是raise_application_error(8-2061,'derp');而不是SIGNAL SQLSTATE ... – Jack 2012-07-06 18:47:52

+0

分隔符在哪裏? – jcho360 2012-07-06 19:02:12

+0

的分隔符應該是; – Jack 2012-07-06 19:07:18

回答

0
Delimiter $$ 

CREATE TRIGGER `VerficiaDispon` BEFORE INSERT ON `ordini` 
FOR EACH 
ROW 
BEGIN 
DECLARE temp INT 

SET temp = (SELECT disponibili FROM motoinstock 
      WHERE Moto = new.Moto_Comprata 
       AND Concessionario = new.Concessionario_Vendita); 

IF temp = 0 OR temp IS NULL THEN SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'Moto non disponibile'; 

END IF ; 

SELECT acquisti 
INTO temp 
FROM clienticoncessionari 
WHERE cliente = new.Cod_Cliente 
AND concessionario = new.Concessionario_Vendita; 

IF temp %2 =1 THEN SET new.Prezzo_Vendita = (new.Prezzo_Vendita * 0.9) ; 

END IF ; 

END 
$$ 

Delimiter ; 
+0

我保持同樣的錯誤: #1064 - 你的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在'SET temp =(在第7行選擇disponibili FROM motoinstock WHERE Moto = new.M' – Jack 2012-07-07 07:46:15

0

SIGNAL語句只在MySQL 5.5中可用。

在5.1觸發使用信號將導致一個語法錯誤,因爲MySQL不知道這種說法。

0

好吧,我已經解決了幾乎所有問題。 現在的代碼是這樣的:

delimiter $$ 
CREATE TRIGGER `VerficiaDispon` BEFORE INSERT ON `ordini` 
FOR EACH 
ROW 
BEGIN 

DECLARE temp integer; 
SET temp = (SELECT disponibili FROM motoinstock 
      WHERE Moto = new.Moto_Comprata 
       AND Concessionario = new.Concessionario_Vendita); 

IF temp=0 OR temp=NULL THEN 
RAISE_APPLICATION_ERROR(-20001,'NA'); 


SET temp = (SELECT acquisti FROM clienticoncessionari 
      WHERE cliente = new.Cod_Cliente 
       AND concessionario = new.Concessionario_Vendita); 

IF temp %2 =1 THEN SET new.Prezzo_Vendita = (new.Prezzo_Vendita * 0.9) ; 

END IF ; 


END 
delimiter ; 

現在我的問題是關於IF。我不能提出一個錯誤,出於某種原因RAISE_APPLICATION_ERROR不會工作。 其餘的都很好。有關如何處理錯誤的任何想法?