sql >> Database >  >> RDS >> Mysql

Cursor gebruiken in een lus van een opgeslagen procedure

Je kunt doen wat je wilt door de cursor te nesten in een BEGIN ... END blok. Zie Roland Bouman's "Nesting MySQL Cursor Loops" artikel voor meer details. Het is misschien de moeite waard om op te merken dat zijn opmerkingen over deze techniek vaak onnodig zijn, omdat het vaak mogelijk is om de query te herschrijven in plaats van een geneste cursor te moeten uitvoeren.

Mocht je je cursor nog steeds in een lus moeten nesten, dan zou je code er ongeveer zo uit moeten zien:

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. Is dit de beste manier om een ​​audit trail te creëren?

  2. Slaapstand, Postgresql:Kolom x is van het type oid, maar expressie is van het type byte

  3. bereken een gemiddelde zonder decimalen

  4. Hoe NIET RLIKE werkt in MySQL