sql >> Databáze >  >> RDS >> Mysql

Použití kurzoru ve smyčce uložené procedury

Můžete dělat, co chcete, vložením kurzoru do BEGIN ... END blok. Viz Roland Bouman "Vnoření kurzorových smyček MySQL" článek pro více podrobností. Možná by stálo za zmínku jeho komentáře o tom, že tato technika je často zbytečná, protože často je možné přepsat dotaz namísto nutnosti provádět vnořený kurzor.

Pokud stále potřebujete vnořit kurzor do smyčky, váš kód by měl vypadat nějak takto:

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. Název sloupce tabulky Oracle s mezerou

  2. Vyberte posledních 20 objednávek vzestupně - PHP/MySQL

  3. Proč optimalizátor nepoužívá znalost zásobníku vyrovnávacích pamětí

  4. Vrácení hodnoty, když v PDO nejsou žádné řádky