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;

次のエラーが表示されます。

1064 - SQL 構文にエラーがあります。4行目のnear ''を使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください

私は商売として SQL Server の人間であり、問​​題が何であるかを特定することはできません。

4

2 に答える 2

6

区切り文字を変更する必要があります。それがなければ、セミコロンは 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 ;
于 2012-04-06T21:25:02.353 に答える
3

トリガーのセミコロンが台無しになっています。DELIMITERMySQL が使用している区切り文字を変更するには、キーワードを使用する必要があります。

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 ;
于 2012-04-06T21:25:39.210 に答える