2012-04-06 3 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; 

을 만들 수 있습니다.트리거 문이 나에게 다음과 같은 오류를 제공

+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 ; 
관련 문제