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 行目にエラーが表示されます。select X を temp に設定し、temp=(...) を設定しようとしましたが、何も動作しないようです。シンタックスエラーが見つかりません。誰か助けてもらえますか? それはSQL 5.1でなければなりません

4

3 に答える 3

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 に答える
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 に答える