MySQL-store-Verfahren: Wie deklarieren Sie einen Cursor für eine Select-Anweisung aus einer temporären Tabelle?
In eine MySQL Prozedur Speichern, wie kann ich deklarieren Sie einen cursor für eine Temporäre Tabelle, die erstellt wird, von einer select-Anweisung.
Danke,
DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_foo`$$
CREATE PROCEDURE sp_foo()
BEGIN
DROP TEMPORARY TABLE IF EXISTS `TmpMyTable`;
CREATE TEMPORARY TABLE `TmpMyTable` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`person_id` INT(11) NOT NULL,
`first_name` VARCHAR(60) NOT NULL,
`last_name` VARCHAR(60) NOT NULL,
PRIMARY KEY (`id`),
INDEX `idx_first_name` (`person_id`),
INDEX `idx_first_name` (`first_name`)
) ENGINE=MYISAM
SELECT
id AS `person_id`,
first_name,
last_name
FROM person
;
DECLARE _person_id INT(11);
DECLARE personCursor CURSOR
FOR
SELECT * FROM TmpMyTable;
OPEN personCursor;
LOOP
FETCH personCursor INTO _person_id;
...
END LOOP;
END$$
DELIMITER ;
- Warum nicht erstellen Sie einfach Ihren cursor mit der select in der temp-Tabelle-Erstellung? Erstellen von temporären Tabellen erzeugen viel IO ist. Was ist der Mehrwert der temporären Tabelle in diesem Fall. Es hat nur 3 Felder, die vermutlich nicht aktualisiert werden. Bitte geben Sie mehr details über das, was ist genau erforderlich.
- Vielen Dank, Cedric, für deinen input.
- Das problem ist, dass ich das temp-Tabelle mehrere Zeit und ich will nicht ausführen, die Option mehrere Zeit!
- Ich habe es, nur ich verwendet, geschachtelte BEGIN..END-Blöcke, wie angegeben in hier
Du musst angemeldet sein, um einen Kommentar abzugeben.
In deinem Beispiel, stellen Sie den cursor Erklärung vor dem erstellen der temporären Tabelle. Scheint unlogisch, aber es funktioniert.