2016-07-08 14 views
0

Mein Trigger ist hier.Wie man den Cursor auf der Bedingungsbasis nach dem Einfügen des Triggers deklariert (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// 

Ich wünsche demo_cusror als je neuen Feldwert so etwas wie

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

Ich versuchte zu erklären, aber ich kann nicht, wenn die Bedingung auf Deklarationsteil setzen.

Antwort

0

Sie können keine Variablen in mysql bedingt deklarieren. Zeitraum. Wie MySQL-Dokumentation auf declare sagt:

DECLARE nur innerhalb einer Anweisung BEGIN ... END Verbindung erlaubt ist, und an ihrem Anfang, vor allen anderen Anweisungen sein muss.

Deklarieren Sie 2 Cursorvariablen und entscheiden Sie in der Anwendungslogik, welche verwendet werden soll.