0

アイテムがデータベースに挿入されたときにアイテムを削除済みとしてマークするトリガーを作成しようとしています。

悲しいことに、DECLARE のエラーを止めることができません。DECLARE のドキュメントといくつかの例を見てきましたが、何かが欠けているに違いありません。

私がこれまでに持っているクエリは次のとおりです。

CREATE TRIGGER set_deleted BEFORE INSERT ON customercontact
FOR EACH ROW
BEGIN
DECLARE numrow INT; /* line 4 */

        SELECT COUNT(*)
        INTO numrow
        FROM orders
        WHERE NEW.order_id = 1;

        if numrow >= 1 THEN
            SET new.deleted = 1;
        END IF;
END

エラーメッセージは次のとおりです。

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4 

あなたの助けに感謝し、私が脱皮するのを防いでくれてありがとう!

4

1 に答える 1

2

これを試して:

DELIMITER $$

CREATE TRIGGER set_deleted BEFORE INSERT ON customercontact
FOR EACH ROW
BEGIN
DECLARE numrow INT; /* line 4 */

        SELECT COUNT(*)
        INTO numrow
        FROM orders
        WHERE NEW.order_id = 1;

        if numrow >= 1 THEN
            SET new.deleted = 1;
        END IF;
END$$

DELIMITER ;

TRIGGER または STORED PROCEDURE を作成するときに区切り文字を変更する必要があります。

デフォルトでは、MySQL 自体がセミコロンをステートメント区切り文字として認識するため、一時的に区切り文字を再定義して、MySQL が格納されたプログラム定義全体をサーバーに渡すようにする必要があります。それ以外の場合、MySQL は END ステートメントに到達する前に CREATE TRIGGER を中断します (最初のセミコロン、この場合は DECLARE ステートメント)。

詳細については、ドキュメントを参照してください: http://dev.mysql.com/doc/refman/5.5/en/stored-programs-defining.html

于 2013-10-16T09:21:26.033 に答える