sql >> Database teknologi >  >> RDS >> Mysql

Brug af markøren i en sløjfe af en lagret procedure

Du kan gøre, hvad du vil, ved at indlejre markøren i en BEGIN ... END blok. Se Roland Boumans "Nesting MySQL Cursor Loops" artikel for flere detaljer. Det kan være værd at bemærke hans kommentarer om, at denne teknik ofte er unødvendig, da det ofte er muligt at omskrive forespørgslen i stedet for at skulle udføre en indlejret markør.

Skulle du stadig have brug for at indlejre din markør i en løkke, skulle din kode se nogenlunde sådan ud:

increment: LOOP
    block_cursor: BEGIN
        DECLARE cur1 CURSOR FOR SELECT person_id, publication_id  FROM p_publication WHERE person_id = new_count;
        DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
        OPEN cur1;
        REPEAT
            FETCH cur1 INTO pub_id, per_id;
            IF NOT done THEN
                INSERT INTO test.t2 VALUES (pub_id, per_id);
            END IF;
            SET new_count = new_count + 1;
        UNTIL done END REPEAT;
        CLOSE cur1;
        IF !(new_count < old_count ) THEN
            LEAVE increment;
        END IF;
    END block_cursor;
END LOOP increment;



  1. Sådan gør du SQLites LIKE-operatør case-sensitive

  2. Hvorfor nosql med cassandra i stedet for mysql?

  3. Indsæt til alle celler, når poster er mere end én PHP

  4. FEJL:Kunne ikke bygge gem native udvidelse (mysql2 on rails 3.2.3)