0

我有这个触发器:

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

4

3 回答 3

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 ;
于 2012-07-06T19:18:19.817 回答
0

SIGNAL 语句仅在 MySQL 5.5 中可用。

在 5.1 的触发器中使用 SIGNAL 会导致语法错误,因为 MySQL 不知道这个语句。

于 2012-07-06T21:18:43.870 回答
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 不起作用。其余的都很好。关于如何处理错误的任何想法?

于 2012-07-07T10:32:53.747 回答