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
InformationsquelleAutor Touka | 2013-10-03
Schreibe einen Kommentar