2016-06-30 2 views
-1

Ich habe eine Tabelle nach dem Einsatz verwenden trigger.i Cursor perpose logic.I zum Einschleifen diese müssen verwenden wollen versuchen, einfach declare cursorWie NEW Wert in Cursor verwenden (nach dem Insert-Trigger Mysql)

DECLARE demo_cursor CURSOR FOR SELECT * FROM tbl_demo WHERE id=NEW.id; 

jedoch seine nicht funktioniert, aber seine Arbeit gut, wenn die Verwendung statischer insted NEW.id wie diese

DECLARE demo_cursor CURSOR FOR SELECT * FROM tbl_demo WHERE id=5; 

was schief gehen.

Vielen Dank im Voraus

+0

Ist dieser Code Teil eines Triggers? – Shadow

+0

Ja sein Code Teil eines Auslösers, um cusror zu deklarieren –

+1

Zeigen Sie die vollständige Definition des Auslösers - oder zumindest vereinfacht, so erfasst es das Problem. –

Antwort

1

Ich kann das Problem nicht reproduzieren.

mysql> DROP TABLE IF EXISTS `tbl_demo`, `result_demo`; 
Query OK, 0 rows affected (0.01 sec) 

mysql> CREATE TABLE IF NOT EXISTS `tbl_demo` (
    -> `id` INT, 
    -> `value` VARCHAR(50) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE TABLE IF NOT EXISTS `result_demo` (
    -> `id` INT, 
    -> `value` VARCHAR(50) 
    ->); 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER // 

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// 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER ; 

mysql> INSERT INTO `tbl_demo` 
    -> (`id`, `value`) 
    -> VALUES 
    -> (1, 'Value 1'), 
    -> (1, 'Value 2'), 
    -> (1, 'Value 3'); 
Query OK, 3 rows affected (0.01 sec) 
Records: 3 Duplicates: 0 Warnings: 0 

mysql> SELECT 
    -> `id`, 
    -> `value` 
    -> FROM 
    -> `tbl_demo`; 
+------+---------+ 
| id | value | 
+------+---------+ 
| 1 | Value 1 | 
| 1 | Value 2 | 
| 1 | Value 3 | 
+------+---------+ 
3 rows in set (0.00 sec) 

mysql> SELECT 
    -> `id`, 
    -> `value` 
    -> FROM 
    -> `result_demo`; 
+------+---------+ 
| id | value | 
+------+---------+ 
| 1 | Value 1 | 
| 1 | Value 1 | 
| 1 | Value 2 | 
| 1 | Value 1 | 
| 1 | Value 2 | 
| 1 | Value 3 | 
+------+---------+ 
6 rows in set (0.00 sec) 
Verwandte Themen