2016-07-08 52 views
0

我的触发器位于此处。如何在插入触发器(Mysql)后在条件基础上声明游标

mysql> CREATE TRIGGER `trg_after_insert` AFTER INSERT ON `tbl_demo` 
    -> FOR EACH ROW 
    -> BEGIN 
    -> DECLARE `done` BOOL DEFAULT FALSE; 
    -> DECLARE `_id` INT; 
    -> DECLARE `_value` VARCHAR(50); 
    -> 
    -> DECLARE `demo_cursor` CURSOR FOR 
    -> SELECT * -- <- SELECT `id`, `value` Recommendation for use 
    -> FROM `tbl_demo` 
    -> WHERE `id` = NEW.`id`; 
    -> DECLARE CONTINUE HANDLER FOR NOT FOUND SET `done` := TRUE; 
    -> 
    -> OPEN `demo_cursor`; 
    -> 
    -> `read_loop`: LOOP 
    ->  FETCH `demo_cursor` INTO `_id`, `_value`; 
    -> 
    ->  IF `done` THEN 
    ->  CLOSE `demo_cursor`; 
    ->  LEAVE `read_loop`; 
    ->  END IF; 
    -> 
    ->  INSERT INTO `result_demo` 
    ->  (`id`, `value`) 
    ->  VALUES 
    ->  (`_id`, `_value`); 
    -> END LOOP; 
    -> END// 

我要申报demo_cusror按新字段值类似

if NEW.`id`=NULL THEN 
    DECLARE `demo_cursor` CURSOR FOR SELECT * tbl_demo ; 
ELSE 
    DECLARE `demo_cursor` CURSOR FOR SELECT * tbl_demo2; 
END IF 

我试过,但我不能把if条件的声明部分。

回答

0

你不能在mysql中有条件地声明任何变量。期。作为declare MySQL文档说:

DECLARE只允许在BEGIN ... END复合语句,并且必须是在它的开始,任何其他语句之前。

声明2个游标变量并在应用程序逻辑中决定使用哪一个。