2012-07-06 60 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不会工作。 其余的都很好。有关如何处理错误的任何想法?