sql >> Databasteknik >  >> RDS >> Mysql

Använda markören i en slinga av en lagrad procedur

Du kan göra vad du vill genom att kapsla markören i en BEGIN ... END blockera. Se Roland Boumans "Nesting MySQL Cursor Loops" artikel för mer information. Det kan vara värt att notera hans kommentarer om att denna teknik ofta är onödig, eftersom det ofta är möjligt att skriva om frågan istället för att behöva utföra en kapslad markör.

Skulle du fortfarande behöva kapsla markören i en slinga bör din kod se ut ungefär så här:

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. mysql tidsdiff till timmar

  2. Hur hittar man tredje eller nᵗʰ högsta lön från lönetabellen?

  3. Skillnad mellan GiST och GIN-index

  4. två ord och tomma utrymmen fungerar inte i MYSQL-frågan med LIKE