带触发器的Mysql Cursor:同一个表在单个游标上多次更新

时间:2018-03-14 07:50:15

标签: mysql triggers cursor

我有两个带有字段的表类别。

id parent_id name   enabled
---------------------------
1    0       abc     1
2    1       mnc     1

另一张牌brand_master

id category_id name   admin_status
---------------------------
1    1         pqr     1
2    2         xyz     1

我需要在“已启用”字段更新类别的基础上更新品牌表“admin_status”字段。

我有以下触发器。

CREATE TRIGGER `category_update` AFTER UPDATE ON `categories`
 FOR EACH ROW BEGIN
DECLARE brand_finished INTEGER DEFAULT 0;
DECLARE brand_master_finished INTEGER DEFAULT 0;
DECLARE v_finished INTEGER DEFAULT 0;
DECLARE selected_id INT; 

/**brand record updateed start**/
BEGIN
DECLARE brand_master_cursor CURSOR FOR 
 SELECT brand_master.id FROM `brand_master`
 INNER JOIN categories c ON c.id=brand_master.category_id WHERE c.parent_id=old.id;

 DECLARE CONTINUE HANDLER 
        FOR NOT FOUND SET brand_master_finished = 1;
 OPEN brand_master_cursor;
 get_email: LOOP
 FETCH brand_master_cursor INTO selected_id;
 IF brand_master_finished = 1 THEN 
 LEAVE get_email;
 END IF;
 UPDATE brand_master SET admin_status=new.enabled WHERE `category_id` = old.id;
 UPDATE brand_master SET admin_status=new.enabled WHERE brand_master.id = selected_id;

 END LOOP get_email;
 CLOSE brand_master_cursor; 
 END;
 /** end**/
END

我尝试使用两个光标进行父类别的品牌更新,然后使用子类别品牌更新。但它只更新父类别的品牌。 所以我创建了上面一个光标,将两个更新查询组合成单个。 但在上面,当父类别被禁用/启用时,它仅更新父类别品牌。如果我禁用/启用子类别,则它不会仅更新子类别。

离。如果我更新类别ID“1”enabled = 0,则更新两个品牌admin_status = 0。 但如果我更新类别ID“2”启用= 0,则不会更新任何内容。

请帮忙。如何在不同条件的单个光标中两次更新同一个表?

0 个答案:

没有答案