0

このトリガーを作成しましたが、機能しません。次のエラーが表示されます。

11:24:11 CREATE TRIGGER check_venduti AFTER INSERT ON venduti FOR EACH ROW BEGIN SELECT count(*) AS num_rows FROM prodotto WHERE cod_prodotto=NEW.cod_prodotto if numrows < 0 then SIGNAL "error" end エラー コード: 1064。エラーが発生しました。 SQL 構文で; MySQL サーバーのバージョンに対応するマニュアルで、6 行目の 0.000 秒付近の「if numrows < 0 then SIGNAL "error" end」を使用する正しい構文を確認してください。

これらは私のテーブルです:

CREATE TABLE clienti (cod_cliente integer(4) auto_increment,nome varchar(100),cognome varchar(100),primary key(cod_cliente))Engine=InnoDB;
CREATE TABLE prodotto(cod_prodotto integer(4) auto_increment,descrizione varchar(100),qnt integer(4),primary key(cod_prodotto))Engine=InnoDB;
CREATE TABLE venduti (cod_vendita integer(4)  auto_increment,cod_cliente integer(4) REFERENCES clienti(cod_cliente),cod_prodotto integer(4)

関連情報 prodotto(cod_prodotto),主キー(cod_vendita))Engine=InnoDB;

これが私のトリガーです:

delimiter |
CREATE TRIGGER check_venduti
 BEFORE INSERT ON venduti
  FOR EACH ROW
   BEGIN
    SELECT count(*) AS num_rows FROM prodotto WHERE cod_prodotto=NEW.cod_prodotto
    if num_rows == 0 then
     SIGNAL "error"
    end;
   END;
|

今、あなたの答えに従って、このモードでコードを編集しました:

delimiter |
CREATE TRIGGER check_venduti
 BEFORE INSERT ON venduti
  FOR EACH ROW
   BEGIN
    DECLARE num_rows INT;
    SELECT count(*) INTO num_rows FROM prodotto WHERE cod_prodotto=NEW.cod_prodotto;
     if num_rows==0 then
      SIGNAL "error"
     end;
   END;
|

しかし、私は同じエラーを受け取ります:

4

1 に答える 1

1

SELECTステートメントを終了していないため、構文エラーが発生します。

ステートメントを終了しても、SELECTステートメントでnum_rows変数は定義されませんIF

後でテストするために、ステートメントの結果を変数に格納できます。SELECT

BEGIN
  DECLARE num_rows INT;
  SELECT COUNT(*) INTO num_rows ... ;
  IF num_rows = 0 THEN
    ...

ただし、実際にやろうとしているのは、に外部キー制約を適用しているようですvenduti.cod_prodotto:

ALTER TABLE venduti
  ADD FOREIGN KEY (cod_prodotto) REFERENCES prodotto (cod_prodotto);
于 2013-05-25T10:41:59.687 に答える