2012-04-06 10 views
2
CREATE TRIGGER google_inventory BEFORE UPDATE ON `cataloginventory_stock_item` 
FOR EACH ROW 
BEGIN 
    update `catalog_product_entity_int` 
    set value=20 
    where attribute_id=552 
      and entity_id=NEW.product_id 
      and NEW.is_in_stock=0; 
    update `catalog_product_entity_int` 
    set value=21 
    where attribute_id=552 
      and entity_id=NEW.product_id 
      and NEW.is_in_stock=1; 
    END; 

を作成するそれは私に次のエラーを与える:TRIGGER文

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

私は貿易によって、SQL Serverの男だと問題が何であるかに私の指を置くことはできません。

+0

NEW.product_idとNEW.is_in_stockは何ですか? – Taryn

+0

新しいものは、このドキュメントのテーブルで行われている変更を参照するトリガ構文です。http://dev.mysql.com/doc/refman /5.0/en/create-trigger.html – RThomas

答えて

5

区切り文字を変更する必要があります。それがなければ、セミコロンはCREATE TRIGGERステートメントを終了します。

delimiter | 

CREATE TRIGGER google_inventory BEFORE UPDATE ON `cataloginventory_stock_item` 
FOR EACH ROW 
BEGIN 
    update `catalog_product_entity_int` 
    set value=20 
    where attribute_id=552 
      and entity_id=NEW.product_id and NEW.is_in_stock=0; 
    update `catalog_product_entity_int` 
    set value=21 
    where attribute_id=552 
      and entity_id=NEW.product_id and NEW.is_in_stock=1; 
    END; 
| 

delimiter ; 
+0

私は尋ねてうれしい...私は自分自身の限られたmysql経験でそれを考え出すことはなかったでしょう。ありがとう。 – RThomas

+0

私は助けてくれると嬉しいです:) –

3

トリガーのセミコロンが原因です。 MySQLが使用している区切り文字を変更するには、DELIMITERキーワードを使用する必要があります。

http://dev.mysql.com/doc/refman/5.0/en/create-procedure.htmlから:

mysql> delimiter // 

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) 
    -> BEGIN 
    -> SELECT COUNT(*) INTO param1 FROM t; 
    -> END// 
Query OK, 0 rows affected (0.00 sec) 

mysql> delimiter ;