1

私はテーブルsalesOrderItemsを持っています:

soItemID           INT(11)         PK
salesOrderID       INT(11)
productID          INT(11)
cost               DECIMAL(7,2)
qty                TINYINT(2)
extendedCost       DECIMAL(8,2)

PHPを介して、ユーザーにproductIDを入力するためのフォームが表示され(ドロップダウンを介して)、その選択によりコストフィールドに入力されます。次に、ユーザーは数量を入力します。 extendedCostフォームには表示されません。

私が欲しいのは、単純に自動計算/挿入extendedCost(つまり、コストx数量の乗算)してデータを入力するトリガーextendedCostですが、1064エラーが発生します。

これがトリガーです-何が欠けているのですか?私はこれを20回行ったことを誓います:

DELIMITER $$

DROP TRIGGER IF EXISTS EXTENDEDCOST $$

CREATE TRIGGER EXTENDEDCOST AFTER INSERT ON salesOrderItems FOR EACH ROW BEGIN

    UPDATE salesOrderItems
    SET extendedCost = (cost * qty)
    WHERE soItemID = NEW.soItemID;

END $$

DELIMITER ;

結果:

ERROR 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 '-db' at line 1

SQL Statement:

USE <my db/schema>



ERROR: Error when running failback script. Details follow.



ERROR 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 '-db' at line 1

SQL Statement:

USE <my db/schema>

それは愚かなことだと確信していますが、それは私を狂わせており、私は完全に立ち往生していて、余分な目を必要としています...

よろしくお願いします!

4

1 に答える 1

0

計算値を挿入しようとしているので、挿入前にトリガー時間を設定せずに追加の更新を実行するのはなぜですか

CREATE TRIGGER EXTENDEDCOST BEFORE INSERT ON salesOrderItems FOR EACH ROW BEGIN
  SET NEW.extendedCost = NEW.cost * NEW.qty
END $$

他のフィールドに基づいてフィールドを計算するには、この回答mysql'afterinsert'トリガーも参照してください。

于 2012-08-15T19:17:40.143 に答える