2016-07-08 51 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個遊標變量並在應用程序邏輯中決定使用哪一個。